【发布时间】:2018-01-16 09:44:38
【问题描述】:
我想创建一个泛型方法,其返回类型包含发送到该方法的泛型元素。 只要输入参数的类型与泛型类型完全相同,这就可以正常工作。但是我希望可以发送泛型类型的扩展。
基本上,我想创建一个方法,createList,它适用于这两个调用:
List<Object> list = createList("foo");
List<String> list2 = createList("bar");
下面的这个通用方法适用于第二次调用,但不适用于第一次。
private static <T> List<T> createList(T element) {
List<T> list = new ArrayList<>();
list.add(element);
return list;
}
对于第二次调用,我收到一个编译错误,提示“不兼容的类型。必需的对象。找到的字符串”。
以下是非通用版本,第一次调用时效果很好,但第二次调用时就不行了:
private static List<Object> createList(Object element) {
List<Object> list = new ArrayList<>();
list.add(element);
return list;
}
这里的编译错误与其他版本相同,但这次需要 String,并且找到了 Object。
是否可以创建一个方法(最好使用泛型)以使这两个调用都有效? (使用 Java 7)
【问题讨论】:
-
您还没有编写自己的名为
Object的类吗?或者从某个奇怪的库中导入了Object类?您的编译错误表明这里的Object没有通常的定义。 -
你可以只投射到对象:
createList((Object)"foo") -
我可以使用 Java 7 重现,但这在 Java 8 中运行良好。所以答案是更新。
-
@DawoodibnKareem 不,它是标准的 Java 对象 (java.lang.Object)。
-
@JornVernee 我需要它来使用 Java 7。