0

現在のジェネリックス対応コンパイラーと、ジェネリックスについて(まだ)知らない古いコンパイラーまたはエキゾチックコンパイラーでコンパイルする必要のあるJavaコードがいくつかあります。Class.isAssignableFrom()が使用されるまれな場合を除いて、ほとんどすべてのコードを警告なしで正常にコンパイルすることができました。

この例はどちらかのコンパイラでコンパイルされますが、ジェネリックス対応のコンパイラは次のような警告を出します。

「型安全性:メソッドisAssignableFrom(Class)はraw型Classに属しています。ジェネリック型Classへの参照はパラメーター化する必要があります」

public static boolean isType( Class type, Class clazz )
{
    return type.isAssignableFrom( clazz );
}

これは警告を取り除きますが、もちろんジェネリックなしではコンパイルされません:

public static boolean isType( Class<?> type, Class clazz )
{
    return type.isAssignableFrom( clazz );
}

これを置き換えて修正することができましたが、Class.isInstance()他のいくつかのケースでは、どこでも正常にコンパイルされますが、実際に任意のクラスオブジェクトで呼び出すMyClass.class.isAssignableFrom( clazz )必要があるケースがいくつか残っています。Class.isAssignableFrom()@SuppressWarningsは、Java 1.5拡張機能以降を認識しているコンパイラによってのみ理解されるため、どちらも使用できません。

それで、これを修正する方法のアイデアはありますか、それとも私は警告に耐えなければなりませんか?

4

1 に答える 1

2

その警告に耐えるか、条件付きコンパイルを使用します(使用するビルドツールによって異なります)...互換性のない2つのバージョンのJavaをサポートしようとするのは良い習慣ではないと思いますが。そして、それらはコンパイルに関する単なる警告よりも悪いことかもしれません。

于 2010-11-16T20:36:38.107 に答える