更新:让我在这里添加一个复杂的内容。假设createObject()
返回实际上实现2个接口的Object
-SomeInterface
和AnotherInterface
。为了使用Object
,调用者必须将其类型转换为接口之一。在这种情况下,下面的代码片段可以吗?
我有一个“工厂方法”,该方法在内部创建某种“未知”类型的对象,并仅返回一个“对象”。该工厂方法的文档(例如createObject())明确指出,由此创建/返回的对象将实现特定的接口(例如SomeInterface)。所以我有一个代码片段,如下所示:
SomeInterface intf = (SomeInterface) createObject();
如果(例如)createObject()
返回了未实现Object
的{{1}},这会导致运行时异常,我可以接受。但是Java专家说此代码“错”了-原因(根据他的说法)是SomeInterface
必须返回createObject()
。
我不太相信,并愿意向这里的社区学习。
答案 0 :(得分:0)
Maven正确地说-工厂方法不好。但是假设问题是由外部代码(您无法更改)引起的,则只有3种解决方法:
每种解决方案的利弊都非常明确-您必须做出选择:)
答案 1 :(得分:0)
由于这不是编译器错误,因此我假设mave运行代码样式检查器。 在强制转换之前,通过检查创建的对象是否是接口的实例来更正“错误”。
SomeInterface intf = null;
{
Object obj = createObject();
if (obj instanceof SomeInterface) {
intf = (SomeInterface) createObject();
}
}
由于对象可以为null,所以null永远不会是SomeInterface,因此我给出了一些环境代码。尽可能适应您的需求。