java – Generics:为什么我不能将Object作为我的Collection的参数?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Generics:为什么我不能将Object作为我的Collection的参数?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1696字,纯文字阅读大概需要3分钟。
内容图文
我正在经历Generics Tutorial并且正在通过示例将对象从数组复制到集合.
码
static void fromArrayToCollection(Object[] a, Collection<?> c) {
for (Object o : a) {
c.add(o); // Compile time error
}
}
我想我可以将对象作为参数传递给集合,它应该没有任何问题,但教程说
By now, you will have learned to avoid the beginner’s mistake of trying to use Collection as the type of the collection parameter.
为什么将Object作为参数类型传递给Collection是不正确的方法?
更新:
static void fromArrayToCollection(Object[] a, Collection<Object> c) {
for (Object o : a) {
c.add(o); // Compile time error
}
}
解决方法:
他们所指的“初学者错误”是指Collection< Object>当你想说的是“任何收集/收集任何东西”.抽象是完全合法的,将方法声明为Collection< Object>它只是不符合接受任何东西的方法的设计目标.
我们希望能够做到这一点:
public static void main(String[] args) {
String[] stringArray = {"A", "B", "C"};
List<String> stringList = new ArrayList<String>();
fromArrayToCollection(stringArray, stringList);
Integer[] intArray = {1, 2, 3};
List<Integer> intList = new ArrayList<Integer>();
fromArrayToCollection(intArray, intList);
}
public static <T> void fromArrayToCollection(T[] array, Collection<T> collection) {
for (T item: array) {
collection.add(item);
}
}
如果您将其设为Collection< Object>,则无效.
您不能将参数类型声明为Collection< Object>并使它适用于多种类型,如上所述,因为泛型类型不协变.说,传入List< String>是非法的.参数类型为Collection< Object>的方法.集合< String>不是集合< Object>.
考虑标准示例:
List<Integer> intList = new ArrayList<Integer>();
List<Object> objList = intList; //doom impending!!!
objList.add("NOTANUMBER");
int i = intList.get(0).intValue(); //runtime exception!
这就是为什么将它声明为Collection< Object>是非法的.并收集任何东西.
内容总结
以上是互联网集市为您收集整理的java – Generics:为什么我不能将Object作为我的Collection的参数?全部内容,希望文章能够帮你解决java – Generics:为什么我不能将Object作为我的Collection的参数?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。