java - 当参数作为通用 ArrayList<?> 传递时如何添加

标签 java generics collections

我有一个接受通用 ArrayList<?> 的函数作为参数之一,我发现当我尝试使用 ArrayList 的添加方法时出现 Java 错误

no suitable method found for add(MyClass)

我想要完成的是为类和 ArrayList 传递参数,并让函数用类的对象填充 ArrayList。不过,如果我可以改为从我的函数创建并返回 ArrayList,那也很好(少一个参数会很好)。

这里有一些代码来说明我目前是如何尝试解决这个问题的:

public void myFunction(Class clazz, ArrayList<?> myList)
{
  Object myObject=null;
  try{myObject = clazz.newInstance();}catch(Exception e){}      
  myList.add(myObject);
}

...或者可能是这样的:

public ArrayList<?> myFunction(Class clazz)
{
  ArrayList<clazz> myList = new ArrayList<clazz>();
  Object myObject=null;
  try{myObject = clazz.newInstance();}catch(Exception e){}      
  myList.add(myObject);
}

如果有人可以请:

a) 给我看一些执行此操作的代码
b) 解释如何使用泛型实现我的目标
或 c) 让我知道哪里出了问题并提供替代方法

最佳答案

为了给 ArrayList 添加一些东西,你需要让它的类型定义是逆变的。

有点像

public <T> void doSomething(...,List<? super T> args,...) 

会起作用。

关于java - 当参数作为通用 ArrayList<?> 传递时如何添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12769591/

相关文章:

java - 泛型:类型不适用于参数

c# 泛型 "in"关键字

java - Java中的TIntHashSet和Set之间是否有共同的父类?

url - 为 Backbone Collection 使用动态 url

java - 从 Iterator<T> 创建 List<T> 实例

java - System.out 和 System.err 调用的随机打印顺序

java - Espresso-web 检查网页元素不存在

java - 如何从 Class<T> 推断 T 的方法

java - 如何对集合类型的元素应用验证

Java EL 表达式 : "property (num1|str) not readable on type (int|String)"