Tag: oop

如何为一些Java枚举添加常用方法? (抽象类祖先?)

我有一些Java枚举 public enum Aggregation { MORTGAGE( “Mortgage” ), POOLS( “Pools” ), PORTFOLIO( “Portfolio” ); private Aggregation( final String name ) { m_Name = name; } private String m_Name; static Map c_LOOKUP = new HashMap(); static { for (Aggregation agg:values()){ c_LOOKUP.put(agg.m_Name,agg); } } public Aggregation lookup(String name){ return c_LOOKUP.get( name ); } @Override public String toString() […]

即使超类实现相同的接口,在子类中实现接口也有任何好处

当我看到ArrayList的声明时 class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable 尽管ArrayList的超类AbstractList实现了相同的List接口,但它实现了List接口。 abstract class AbstractList extends AbstractCollection implements List 类似的声明也可以在HashMap , LinkedHashMap声明中找到。 在LinkedHashMap的声明中,它仅实现了Map接口,而不是其超类HashMap实现的其他接口。 因此,拥有此类声明可能会带来一些好处。

如何从基类实例中找出子类?

有没有办法从基类实例中找出派生类的名称? 例如: class A{ …. } class B extends A{ … } class c extends A{ … } 现在,如果方法返回A的对象,我可以找出它是B型还是C ?

Javadocinheritance父构造函数文档

考虑我正在扩展一个类,如: public class MyComboBox extends JComboBox { public MyComboBox() { super(); } public MyComboBox(ComboBoxModel model ) { super(model); } } 重新定义父的构造函数(当然适合我的新类)很烦人,但是复制每个构造函数的文档甚至更糟。 更不用说它对于进一步inheritance是不好的,因为我现在必须多次更新文档。 显然, {@inheritDoc}不会起作用,因为我没有压倒任何东西。 然而,这是我正在寻找的行为。 有没有办法实现这个目标? 如何inheritance父构造函数文档?

片段:蓝牙服务和片段连接

我对我的项目进行了调试,我的3.片段无法连接蓝牙服务。 这包括向其他设备发送消息。 我的连接是启动第一个片段我的设备ID和设备名称应该保持蓝牙服务但我连接下面的代码我的连接null和ConnectedThread返回null对象。 那我怎样才能再次在我的片段中连接蓝牙服务java? 我在片段上称这一行 mBluetoothConnection = new BluetoothConnectionService(getActivity().getApplicationContext()); 并在BluetoothService.java中编写函数: button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { byte[] bytes = editText.getText().toString().getBytes(Charset.defaultCharset()); mBluetoothConnection.write(bytes); } }) 我在mBluetoothConnection.write(bytes);上的断点mBluetoothConnection.write(bytes); 这一行和每个ConnectedThread,outputstream都返回null,为什么? 这是我的服务: public class BluetoothConnectionService { private static final String TAG = “BluetoothConnectionServ”; private static final String appName = “MYAPP”; private static final UUID MY_UUID_INSECURE = UUID.fromString(“00001101-0000-1000-8000-00805F9B34FB”); private […]

Java,隐式调用重写方法

现在在一些Java代码中我有这样的东西 class A { void f() { } A() { f(); } } class B extends A{ @Override void f() { //do some stuff super.f(); } } class C extends B { @Override void f() { //do some stuff super.f(); } } 我希望调用f()然后向上遍历每个父类,运行重写的f() 。 我通过显式调用super.f()来做到这一点,尽管我不想这样做。 我这样做的原因是必须在到达A中的构造函数之后进行后处理。 并且每个类中都有正确初始化的状态,这就是为什么我们有f()的向上轨迹。 所以A的构造函数确实如此 A() { //init some state in a […]

解释变量隐藏在这个Java代码中是如何工作的

考虑下面的代码 class A { int x = 5; void foo() { System.out.println(this.x); } } class B extends A { int x = 6; // some extra stuff } class C { public static void main(String args[]) { B b = new B(); System.out.println(bx); System.out.println(((A)b).x); b.foo(); } } 该计划的输出是 6 5 5 我理解前两个但是无法理解最后一个。 b.foo()如何打印5.B类将inheritancefoo方法。 但它不应该打印bx会打印什么? 到底发生了什么?

使用Builder模式扩展类

我正在尝试将类a扩展为aX。 所以,我也扩展了aBuilder。 但是,虽然我能够使用以下方法创建类a的对象: aBuilder f = new aBuilder(); f.bi = i; f.bs = s; a atry = f.withI(i).withS(s).build(); 这同样适用于aX。 当我尝试这样做时: aXBuilder fb = new aXBuilder(); aX aXtry = fb.withI(i).withS(s).withB(b).build(); 我收到一个错误(对于a.aBuilder类型,未定义withB(Boolean)方法)。 我是否应该为aX重写所有内容,而不是简单地添加新内容? 我不想这样做,因为这会导致我的代码中出现大量重复。 a和aX类如下: class a { protected String s; protected int i; public void getdata() { System.out.println(this.s); System.out.println(this.i); } protected a(aBuilder fb) { this.s = […]

Java中的OOP:使用方法链接的类inheritance

我有一个父类,它定义了一个chainer方法的集合(返回“this”的方法)。 我想定义多个子类,这些子类包含自己的chainer方法,但也“覆盖”父方法,以便返回子类的实例而不是父类。 我不想在每个子类中重复相同的方法,这就是为什么我有一个包含所有子类共享的方法的父类。 谢谢。 class Chain { public Chain foo(String s){ … return this; } } class ChainChild extends Chain { //I don’t want to add a “foo” method to each child class /* public ChildChain foo(String s){ … return this; } */ public ChainChild bar(boolean b){ … return this; } } ChainChild child = […]

在不可变类中,为什么字段被标记为私有?

在创建不可变类时使字段为私有有什么好处? 我已经看到为什么在创建不可变类时,字段被声明为私有? 但我从这篇文章中得不到任何理解。 有人可以解释一下吗?