【发布时间】:2016-03-18 00:33:18
【问题描述】:
我有一个名为 IAbc 的给定接口,它由一个带有接口 IXyz 参数的方法组成。我不确定是否应该在我的 IAbc 实现中创建属性 IXyz 或属性 XyzImpl。
public interface IXyz { }
public class XyzImpl implements IXyz {
public void doSomething() { ... }
}
public interface IAbc {
public void setXyz(IXyz val);
public IXyz getXyz();
}
实施 1:
public class AbcImpl1 implements IAbc {
private XyzImpl attr;
public void setXyz(IXyz val) {
attr = (XyzImpl) val;
}
public IXyz getXyz() {
return (IXyz) attr;
}
public void abc() {
attr.doSomething();
}
}
实施 2:
public class AbcImpl2 implements IAbc {
private IXyz attr;
public void setXyz(IXyz val) {
attr = val;
}
public IXyz getXyz() {
return attr;
}
public void abc() {
((XyzImpl)attr).doSomething();
}
}
基本上我只想在我的实现 AbcImpl 中使用我的实现 XyzImpl。
无论如何,如果我访问我的一个实现的方法 abc(),访问方法也需要强制转换。
public void method() {
AbcImpl1 abc;
XyzImpl xyz = (XyzImpl) var.getXyz();
xyz.abc();
}
哪种实现方式更有意义?在将使用我的实现的所有类中进行强制转换也不是很方便。有没有办法只使用我的实现类而不使用接口?
提前感谢您的反馈!
BR,波贝尔
【问题讨论】:
-
看来您的
IXyz界面设计并不合适。看起来IXyz应该有abc()方法,或者你不应该使用IXyz接口。您不应该需要使用任何无法从您将字段存储为的类型访问的方法。
标签: java methods parameters interface casting