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定义为扩展用户,为什么我会收到未检查的警告<T extends User>

4

3 回答 3

7

你误解了泛型。

T extends User并不意味着那T User;这意味着T可以是任何继承的类User

如果TFunkyUser,您的代码将不起作用。

于 2013-03-07T17:04:48.167 回答
2

T可以是任何扩展类User。您正在实例化一个新的User,即超类。因此,如果T完全User类型(即子类),则强制转换是不安全的,并且 aClassCastException将被抛出。

于 2013-03-07T17:04:50.280 回答
0

最小 T 可以是 User ,实际上也可以是 AdvancedUser

class AdvancedUser extends User{}

如果您将 T 声明为高级用户,那么您的程序将失败,因为您将真实的 User 对象向上转换为 AdvancedUser 类型。因此它会给你一个关于不安全演员的警告

于 2013-03-07T17:09:48.507 回答