Java-使用泛型返回多个类型

标签 java generics methods return

我有一个这样的方法-

public List<Apples> returnFruits(String arg1){
List<Apples> fruits = new ArrayList<Apples>();
Apple a = new Apple();
fruits.add(a);

return fruits;
}

我想更改它,以便我可以从方法调用中指定水果类型并返回该水果列表。所以第二条语句应该动态实例化我传递的水果列表。我想到了这个-

public List<?> returnFruits(String arg1){
List<T> fruits = new ArrayList<T>();
T t = new T();
fruits.add(t);

return fruits;
}

但不知道正确的方法,如您所见。

在第二种方法中,我只返回水果而不是列表-

public T returnFruit(){
T t = new T();
return t;
}

传递的水果不在同一个类层次结构中,并且是不同的类型。

谢谢。

最佳答案

如果你确定你会有一个无参数构造函数,你可以使用这个语法:

public <T> List<T> returnFruits(Class<T> clazz){
    List<T> fruits = new ArrayList<T>();
    T t = clazz.newInstance();
    fruits.add(t);

    return fruits;
}

用法:

List<MyClass> m = returnFruits(MyClass.class, "plop");

如果你知道你有一个带字符串参数的构造函数:

public <T> List<T> returnFruits(Class<T> clazz, String arg1){
    List<T> fruits = new ArrayList<T>();
    Constructor<T> constructor = clazz.getConstructor(String.class);
    T t = constructor.newInstance(arg1);
    fruits.add(t);

    return fruits;
}

用法:

List<MyClass> m = returnFruits(MyClass.class, "plop");

等等

关于Java-使用泛型返回多个类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9433104/

相关文章:

c# - 嵌套泛型函数的类型推断

c# - 如何使用 lambda 表达式作为参数通过反射调用方法?

c# - 将多个 SqlParameter 传递给方法

java - 如何在 Scanner 的方法中存储类型信息

java - 方法参数必须是实现某个接口(interface)的某个类的obj

java - 如何在 Mac OS X 上测试 Java 应用程序?

java - 除了一个 servlet 之外,所有内容的过滤器映射到 Struts2?

java - 如何将一个字符串元素与字符串元素数组进行比较?

c# - 无法从 'System.Collections.Generic.IEnumerable<char>' 转换为 'string'

java - 仅当遇到第一个字符时才将荧光笔应用于行,直到 JtextArea 中的 LineEndOffset