首页 / JAVA / java-创建泛型类列表
java-创建泛型类列表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-创建泛型类列表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1514字,纯文字阅读大概需要3分钟。
内容图文
![java-创建泛型类列表](/upload/InfoBanner/zyjiaocheng/686/b98459576e1b48cea235a2bc8fa395ea.jpg)
我有一个实用程序方法,可以从某些对象中创建一个元素列表:
public static final <T> List<T> list(T t) {
final List<T> rv = new ArrayList<>();
rv.add(t);
return rv;
}
我也有一个接受类型为List< Class<?>>的参数的方法.因此,我必须创建该类型的对象.这是我尝试做的事情:
final Class<?> aClass = Integer.class;
final List<Class<?>> trivialListOfClasses = list(aClass);
……这失败了:
[javac] /some/path/Foo.java:41: error: incompatible types
[javac] final List<Class<?>> trivialListOfClasses = list(aClass);
[javac] ^
[javac] required: List<Class<?>>
[javac] found: List<Class<CAP#1>>
[javac] where CAP#1 is a fresh type-variable:
[javac] CAP#1 extends Object from capture of ?
[javac] 1 error
完成上述任务的正确方法是什么?我了解有关Java泛型不变的部分,但是到底发生了什么?
解决方法:
能够在Javac 1.8.0_144上使用-source 7 -target 7进行复制.
如果您只打算从列表中删除东西,那么一件有用的事情就是使用?扩展Class<?> ;:
Class<?> aClass = Integer.class;
List<? extends Class<?>> trivialListOfClasses = list(aClass);
Class<?> bClass = trivialListOfClasses.get(0); // works
// trivialListOfClasses.add(String.class); // doesn't work, though
也可以在列表调用中手动提供通用类型:
Class<?> aClass = Integer.class;
List<Class<?>> trivialListOfClasses = Util.<Class<?>>list(aClass);
Class<?> bClass = trivialListOfClasses.get(0); // works
trivialListOfClasses.add(String.class); // also works
似乎编译器无法调和List< Class<?>>的通配符类型.由列表本身返回的那个.
内容总结
以上是互联网集市为您收集整理的java-创建泛型类列表全部内容,希望文章能够帮你解决java-创建泛型类列表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。