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)
另一种选择是执行以下操作:
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)
`