3

次のコードがあります。

public static <T extends User> void addUser(String username,
        String passwordHash, Class<T> userClass, File usersDir) {

    T user = (T) new User(username, passwordHash);
    UserManager.toFile(user, usersDir);
}

Eclipse から次の警告が表示されます。

Type safety: Unchecked cast from User to T

Tを定義して User を拡張するかどうかがチェックされていないという警告が表示されるのはなぜですか?<T extends User>

4

3 に答える 3

7

あなたはジェネリックを誤解しています。

T extends UserT という意味では ありませんUserTを継承する任意のクラスにできることを意味しますUser

の場合、コードTFunkyUser機能しません。

于 2013-03-07T17:04:48.167 に答える
2

Tの任意の拡張クラスを指定できますUserUser新しい、つまりスーパークラスをインスタンス化しています。したがって、T正確User型 (つまりサブクラス) でない場合、キャストは安全ではなく、 aClassCastExceptionがスローされます。

于 2013-03-07T17:04:50.280 に答える
0

最小 T は User にすることができますが、実際には AdvancedUser にすることもできます

class AdvancedUser extends User{}

実際の User オブジェクトを AdvancedUser タイプにアップキャストしているため、T を上級ユーザーとして宣言すると、プログラムは失敗します。したがって、安全でないキャストに関する警告が表示されます

于 2013-03-07T17:09:48.507 に答える