Krz*_*wek 2 java constructor initializing
class ABC {
private int[] variable;
public int[] getVariable() {
return variable;
}
public ABC() {
variable = new int[123456];
}
}
class DEF extends ABC {
public int[] getVariable() {
return new int[0];
}
}
Run Code Online (Sandbox Code Playgroud)
variable用于ABC,但完全未使用和不必要的DEF.但我看不到任何正确的方法来阻止创建这个大数组DEF,因为总是必须执行一些超类的构造函数.我只看到一种不优雅的方式:ABC的新"假"构造函数:
protected ABC(boolean whatever) {}
Run Code Online (Sandbox Code Playgroud)
然后DEF我可以写:
public DEF() {
super(true);
}
Run Code Online (Sandbox Code Playgroud)
它的工作原理 - variable未初始化.
但是,我的问题是 - 我可以更恰当地解决这个问题吗?
也许如果变量未使用,编译器会自动删除她吗?当这种特征有用时,情况经常发生.
你确定DEF需要延长ABC- 我的意思是,这是一个DEF逻辑上的ABC?继承是强大的,但需要谨慎使用.
在你的情况下,我宁愿:
public interface WithVariable {
int[] getVariable();
}
Run Code Online (Sandbox Code Playgroud)
并且兼顾ABC和DEF实施WithVariable.这种方式构造一个ABC对象将初始化所需的变量,构造一个DEF对象将不会做任何事情,但它们都会回复相同的消息(getVariable()).
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |