私は次のコードを持っています:
SomeInterface self = sessionContext.getBusinessObject(sessionContext.getInvokedBusinessInterface());
そして、次のメソッド署名(Eclipseツールチップから(実際のコードではありません)):
<Object> Object javax.ejb.SessionContext.getBusinessObject(Class<Object> arg0) throws IllegalStateException
何らかの理由で、戻り値の型が Object として解決されます。Eclipse はこの行をエラーとしてマークしないため、これは奇妙ですが、Ant および Maven ビルダーはこの行でオブジェクトを 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