【发布时间】:2013-01-15 04:18:36
【问题描述】:
在我当前的项目中,我被要求实现这样的东西:
interface I {
getA():String;
setA(String);
getB():String;
setB(String);
...
getE():String;
setE(String);
}
class I1 implements I {
// These are basic getters/setters for A, B and C.
getA(){}
setA(String){}
getB():String{}
setB(String){}
getC():String{}
setC(String){}
@Deprecated
getD(){
return null;
}
@Deprecated
setD(String d) {
// Does nothing.
}
@Deprecated
getE(){
return null;
}
@Deprecated
setE(String e) {
// Does nothing.
}
}
class I2 implements I {
// These are basic getters/setters for C, D and E.
getC(){}
setC(String){}
getD():String{}
setD(String){}
getE():String{}
setE(String){}
@Deprecated
getA(){
return null;
}
@Deprecated
setA(String a) {
// Does nothing.
}
@Deprecated
getB(){
return null;
}
@Deprecated
setB(String b) {
// Does nothing.
}
}
因此,基本上,只有 C 属性对这两种实现都有意义。
在界面中设置 A、B、D 和 E 的 getter/setter 有什么意义?为什么不保留 C 的 getter/setter,这样我们就不必在实现中实现无用的 getter/setter?
我被告知的论点是:我们这样做是因为我们习惯于这样做。
所以当我们在方法中处理一些类型 I(接口)的对象时,我们必须一直进行 null 检查。
【问题讨论】:
-
取决于 A-E 本质上是什么,但就像你说的那样看起来很糟糕。可能是他们想将两者都存储在列表中并访问所有变量?我以前也有过这样的偷懒……
-
“我们这样做是因为我们习惯这样做”是一个循环论证。问一个真实的原因。但是如果有很多这样的事情,那么肯定有人应该引入一个包含所有空方法的抽象类,这样你只需要扩展它并覆盖你需要的那些。实际上是一个适配器。
-
是
getA():String;java吗?
标签: java oop interface abstract-class