另一个示例非常复杂,我一点也不了解,我的问题在某种程度上是相似的,但是正如我所说的那样,它更简单并且可能会给出更简单的答案
public List<? extends Parent> myfunction(List<? extends Parent> mylist){
mylist.add(new Child()) ; //Doesn't Compile
}
我相信您正在寻找一种采用列表的方法,向其中添加一些内容,然后返回列表。该列表是通用的,您希望返回类型与参数的类型匹配。
通常情况下,这是您的操作方法:
public <T extends Parent> List<T> myfunction(List<T> myList) {
... // Add something to myList
return myList;
}
具体来说,您尝试添加new Child()
到中myList
。这行不通。myfunction()
可以使用多种列表来调用,而添加new Child()
只能在列表为a List<Parent>
或a时起作用List<Child>
。这是一个不同种类的列表的示例:
public static class Parent {}
public static class Child extends Parent {}
public static class OtherChild extends Parent {}
public <T extends Parent> List<T> myfunction(List<T> myList) {
myList.add(new Child());
return myList;
}
myfunction(new ArrayList<OtherChild>());
在最后一行,myfunction()
用OtherChild
对象列表调用。显然,将Child
对象添加到此类列表中是非法的。编译器通过拒绝的定义来防止这种情况myfunction()
附录
如果您希望myfunction()
能够向其中添加元素,则myList
需要使用工厂(因为Java不允许new T()
T为类型参数,这是由于类型擦除所致)。以下是如何myfunction()
应该是这样的:
public interface Factory<T> {
public T create();
}
public <T extends Parent> List<T> myfunction(List<T> myList,
Factory<? extends T> factory) {
myList.add(factory.create());
return myList;
}
现在,它的用法是:
public static class ChildOfOtherChild extends OtherChild {}
myfunction(new ArrayList<OtherChild>(), new Factory<ChildOfOtherChild>() {
@Override public ChildOfOtherChild create() { return new ChildOfOtherChild(); }
});
}
问题内容: 我为缓存编写了一个函数来检索特定对象。这样我就不需要投了。 我正在这样使用 但是现在我的缓存中有一个字符串列表,我不能这样使用 问题是。我对Java非常陌生,我该怎么写? 问题答案: 您无法获得的类,在您的情况下,唯一的方法是:
问题内容: 我查看了Java Generics文档 ,发现了这段代码, 我可以理解,我们正在从中获取一个元素并将其设置为另一个。因此,编译器给出了一个错误。我的问题是,它是有道理的,当2列出了不同即这里列出了和是不同的。但是在上面的示例中,和是相同的列表。为什么编译器不够聪明才能看到呢?实施起来难吗? 编辑 :我知道我可以通过辅助方法或使用代替来修复它。只是想知道为什么编译器不为我做。 问题答案:
我正在尝试有这样的方法签名:public static List FilterList(List collection,String FilterString,String Property=“”) 这样,我可以从任何地方调用这个方法,并传递给它任何列表,它将返回给我一个过滤的列表。
问题内容: 我有一个代表文本片段的泛型类。该文本片段可能具有多种不同模式(突出显示的不同类型)中的任何一种。这些模式用枚举表示。每个项目的Enum可能不同,但是它必须实现一个接口,该接口提供了一种将其中两个结合的方法(可以突出显示并加粗显示)。所以我有一个界面: 然后我的TextFragment是文本字符串和模式的容器。但是当我尝试声明该类时: 我收到以下错误: 令牌“扩展”的语法错误,预期 根据
问题内容: 我正在使用泛型编写某些东西,令我惊讶的是,我发现这行不通: 那我不能实例化泛型吗?没有任何方法可以做到这一点吗? 问题答案: 是的,这真是令人讨厌。 我使用的解决方法是强制客户端在构造新类时传递类-即 然后您可以使用。
我想通过Google Gson传输一个列表对象,但我不知道如何反序列化泛型类型。 我在看了这个之后尝试了什么(Balusc的回答): 编辑: 现在我有 但是,我确实在“FromJson”行得到以下异常: null