关于java的泛型警告这个问题,没懂 ?

问题:
为什么会报 Unchecked call to 'set(T)' as a member of raw type 'org.test.MyList' 这个警告 ?
到底警告我啥?

阅读 6.3k
4 个回答

你这个警告 "Unchecked call to 'set(T)' as a member of raw type" 一般说明类型参数没有被明确指定。这意味着编译器无法确保在运行时类型安全,因此可能会引发 ClassCastException。

MyList<String> myList = new MyList<>();
myList.set("some string");

这样,编译器就能确保类型安全,不会再显示警告。

定义了类型参数不用怪谁
把T都换成Object就没警告了

定义了泛型类又不具化,那你为啥要引入T

简单说就是,你的 MyList 是一个泛型类,它带有一个泛型参数 <T>,所以你在任何用到这个类的地方,都要明确指明泛型参数的值,比如创建 MyList 对象时,就应该这么写:

MyList<String> mylist1 = new MyList<>();
// 上面的 <String> 就是泛型参数的值

如果不这么写,编译器就会因为你没有限制 mylist1 对象的内容类型而对代码进行警告。

如果你确实认为 mylist1 这个对象可以放入任何类型的内容,那么就可以声明为:

MyList<Object> mylist1 = new MyList<>();

这样 mylist1 里面就可以放入任何类型的值了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题