我有以下代码:
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>
答案 0 :(得分:7)
你误解了泛型。
T extends User
并不意味着T
User
;这意味着T
可以是继承User
的任何类。
如果T
为FunkyUser
,则您的代码将无效。
答案 1 :(得分:2)
T
可以是User
的任何扩展类。您正在实例化一个新的User
,即超类。因此,如果T
不是完全 User
类型(即子类),则转换是不安全的,并且会抛出ClassCastException
。
答案 2 :(得分:0)
最小T可以是用户,实际上也可以是AdvancedUser
class AdvancedUser extends User{}
如果您将T声明为高级用户,那么您的程序将失败,因为您正在将真实的User对象向上转换为AdvancedUser类型。因此,它会向您发出有关不安全演员的警告