如何让Java方法返回任何类型的通用列表?

61 java generics reflection casting list

我想写一个方法,返回java.util.List任何类型的方法,而不需要输入任何东西:

List<User> users = magicalListGetter(User.class);

List<Vehicle> vehicles = magicalListGetter(Vehicle.class);

List<String> strings = magicalListGetter(String.class);
Run Code Online (Sandbox Code Playgroud)

方法签名会是什么样的?像这样的东西,或许(?):

public List<<?> ?> magicalListGetter(Class<?> clazz) {
    List<?> list = doMagicalVooDooHere();

    return list;
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Joo*_*gen 120

private Object actuallyT;

public <T> List<T> magicalListGetter(Class<T> klazz) {
    List<T> list = new ArrayList<>();
    list.add(klazz.cast(actuallyT));
    try {
        list.add(klazz.getConstructor().newInstance()); // If default constructor
    } ...
    return list;
}
Run Code Online (Sandbox Code Playgroud)

也可以为方法提供泛型类型参数.您已正确推断出需要正确的类实例,以创建thing(klazz.getConstructor().newInstance()).


new*_*cct 22

甚至不需要通过课程:

public <T> List<T> magicalListGetter() {
    return new ArrayList<T>();
}
Run Code Online (Sandbox Code Playgroud)

  • 我想你需要在想要添加项目时传递一个类. (3认同)

Aid*_*ina 5

另一种选择是执行以下操作:

public class UserList extends List<User>{

}

public <T> T magicalListGetter(Class<T> clazz) {
    List<?> list = doMagicalVooDooHere();
    return (T)list;
}

List<User> users = magicalListGetter(UserList.class);
Run Code Online (Sandbox Code Playgroud)

`