如何解决使用对象实例化一个集合
| 我想做以下事情(这行不通,只是为了解释这个概念)。知道怎么做吗?Class type;
if (/* something */)
type = String.class;
else
type = Boolean.class;
return new ArrayList<type>();
ArrayList<type>
不起作用。我尝试使用type.getClass()
,也不起作用。
解决方法
将其包装到方法中,将类型传递为泛型
Class
,然后让Java为您完成其余工作。无需任何条件分支。
<T> List<T> newList(Class<T> type) {
return new ArrayList<T>();
}
然后,您可以像这样使用它:
List<String> list = newList(String.class);
请记住,不必在通用类级别指定“ 6”。您可以为该方法指定通用类型,因此,如示例代码中所示,使其成为通用方法。
, 你不能那样做。您的检查在运行时发生,并且泛型在编译后丢失。
泛型的唯一目的是保证编译时的类型安全。在您的示例中,您想在运行时确定类型。
您可以做的是在每个ѭ7中实例化一个不同类型的集合。
, 您应该使用:
public ArrayList<?> getList() {
if (/* something */) {
return new ArrayList<String>();
} else {
return new ArrayList<Boolean>();
}
}
, 类型信息被Java编译器删除,但可以通过其他软件包(例如此软件包)进行访问
, type
不是class
,这种情况下您可以有多个收益
你可以有这个
public <T> List<T> foo(T type) {
return new ArrayList<T>();
}
, if子句大概是在运行时决定的。 Java中的参数化类型在编译时清除。仅返回新的ArrayList()将具有相同的效果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。