我正在用Java编写一个Android应用程序。我的类有两个构造函数-一个是直接传递数据时使用的,另一个是if类应该从包中反序列化数据。每件事看上去都更像以下几点:
public class MyClass {
private final ObservableInt myField;
private final int data;
public MyClass(int data) {
myField = new ObservableInt();
myField.addOnChangedListener(myListener);
this.data = data;
}
public MyClass(Bundle bundle) {
myField = new ObservableInt();
myField.addOnChangedListener(myListener);
this.data = bundle.getInt("SomeName");
}
}
考虑上面这个简单的例子。我有更多的最后字段要填充,还有更多的data
-type字段。
现在请注意,此代码在每个构造函数中重复:
myField = new ObservableInt();
myField.addOnChangedListener(myListener);
我想把它重构到单一的地方,以避免干燥的问题。我试图在上面的每个构造函数中创建私有构造函数并调用this()
,但是编译器抱怨说,"data“字段可能没有初始化,我不想通过参数将它传递给该私有构造函数,因为在我的示例中,需要填充大量的data
。
发布于 2017-10-03 00:10:04
您可以尝试使用这样的初始化器:
public class MyClass {
private final ObservableInt myField = new ObservableInt();
private final int data;
{
myField.addOnChangedListener(myListener);
}
public MyClass(int data) {
this.data = data;
}
public MyClass(Bundle bundle) {
this(bundle.getInt("SomeName"));
}
}
发布于 2017-10-02 23:58:21
尝试创建私有构造函数并调用这个()
您可能并不总是可以使用DRY,但在您的情况下,我会将构造函数链在一起:
public class MyClass {
private final ObservableInt myField;
private final int data;
public MyClass(int data) {
myField = new ObservableInt();
myField.addOnChangedListener(myListener);
this.data = data;
}
public MyClass(Bundle bundle) {
this(bundle.getInt("SomeName"));
}
}
发布于 2017-10-03 00:02:49
默认使用"int“构造函数:
public class MyClass {
private final ObservableInt myField;
private final int data;
public MyClass(int data) {
myField = new ObservableInt();
myField.addOnChangedListener(myListener);
this.data = data;
}
public MyClass(Bundle bundle) {
this(bundle.getInt("SomeName"));
}
}
https://stackoverflow.com/questions/46539746
复制相似问题