我有以下代码:
SomeInterface self = sessionContext.getBusinessObject(sessionContext.getInvokedBusinessInterface());
并遵循方法签名(来自 eclipse 工具提示(不是真实代码)):
<Object> Object javax.ejb.SessionContext.getBusinessObject(Class<Object> arg0) throws IllegalStateException
由于某种原因,返回类型被解析为对象。这很奇怪,因为 eclipse 没有将此行标记为错误,但是 ant 和 maven 构建器在此行上失败了,说 Object 不能转换为 SomeInterface。
我有几个问题:
- 我的代码有什么问题,所以类型推断不正确(实际上它不应该是 Object,因为变量类型是
SomeInterface
)? - 为什么在 Eclipse(错误)中没有将行标记为错误?
我有以下示例,该示例在 Eclipse 下正确编译,但在 Maven 中失败:
public class TestClass implements SomeInterface {
private Resolver resolver;
/**
*
*/
@SuppressWarnings("unchecked")
public TestClass() {
SomeInterface c = resolver.some(resolver.someClass());
}
@Override
public void something() {
}
}
class Resolver {
public <T> T some(final Class<T> c) {
return null;
}
public Class someClass() {
return null;
}
}
interface SomeInterface {
void something();
}
这里的类型是正确推断的(来自 eclipse 工具提示(不是真正的代码)):
<SomeInterface> SomeInterface Resolver.some(Class<SomeInterface> c)
但是这个类仍然不能用maven编译器编译。
我正在使用日食朱诺。
UPD
Maven失败:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project jpharm-server: Compilation failure
[ERROR] TestClass.java:[21,39] incompatible types
[ERROR] found : java.lang.Object
[ERROR] required: SomeInterface