3

私はこのようなコードを持っています:

protected <T> T doSomething(String someParam, Class<T> clazz) {
...
}

TestCaseクラスで使用します。

Class clazz = MyClass.class;
MyClass MyClass = someObject.doSomething(someString, clazz);

このコードはEclipseで警告を出します

クラスはrawタイプです。ジェネリック型クラスへの参照はパラメーター化する必要があります

この行の複数のマーカー
-タイプセーフティ:タイプMyClassの汎用メソッドdoSomething(String、Class)のチェックされていない呼び出しdoSomething(String、Class)
-タイプセーフティ:タイプクラスの式は、クラスに準拠するためにチェックされていない変換が必要です

このコード(テスト)をEclipseで実行すると、すべてが完全に機能します。コマンドプロンプトから「mvncleaninstall」を実行すると、次のようになります。

C:\ pathToProject \ src \ test \ java \ packagesPath \ MyTestCase.java:[xx、xxx]互換性のないタイプが見つかりました:
java.lang.Object
が必要です:com.somePackagePath.MyClass

しかし、提供する場合:

Class<MyClass> clazz = MyClass.class;
MyClass MyClass = someObject.doSomething(someString, clazz);

エラーや警告は表示されません。Javaコンパイラが型情報を消去
することを理解しているので、Eclipseは警告の代わりにコンパイラエラーを提供するべきではありませんか、それとも問題を引き起こすのはmaven-plugin-compilerですか? Mavenプラグインは次のとおりです。

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
                <showDeprecation>false</showDeprecation>
                <debug>true</debug>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>

よろしく、
デスポット

4

3 に答える 3

3

これはEclipseの既知のバグです:33301:[コンパイラ] [1.5] Eclipseは、javacが拒否するコードをコンパイルします:互換性のないタイプ。気軽にバグに投票して、ユースケースを追加してください。


javacとEclipseが一致しない場合があり、バグとして報告する必要があります。Eclipseでコピー/貼り付けしjavac、依存関係なしにコマンドラインからコンパイルできるJavaファイルをできるだけ少なくするスタンドアロンのテストケースを用意することをお勧めします。

于 2011-04-12T10:04:05.347 に答える
0

どのコンパイラを使用していますか?この場合、 http: //code.google.com/p/jclouds/issues/detail?id=461 openjdkは互換性のないタイプを明らかにしているようですが、sunjdkはそれを無視してコンパイルします。

于 2011-05-14T13:42:54.747 に答える
0

回避策は、MavenビルドでのEclipse Javaコンパイラ(ecj)の使用 で説明されているように、MavenでEclipseコンパイラを使用することです。

于 2017-08-03T10:39:16.227 に答える