Ark*_*szK 2 java oop methods types object
我有一个方法:
private List<ApplicationForVacancy> createListOfApplicationsForVacancy(List<Document> documents) {
return documents.stream()
.filter(d -> d instanceof ApplicationForVacancy)
.map(d -> (ApplicationForVacancy) d)
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
但我想在参数中传递类的名称/类的类型,并像这样返回方法的类型:
private List<TypeOfSomeClass> createList (List<Document> documents, String or Type typeOfSomeClass) {
return documents.stream()
.filter(d -> d instanceof typeOfSomeClass)
.map(d -> (typeOfSomeClass) d)
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
是否可以?我怎样才能做到这一点?
您必须提供一个Class对象来声明类型并向方法添加类型参数,如下所示:
private static <T> List<T> filterType(List<?> input, Class<T> clazz) {
return input.stream()
.filter(clazz::isInstance)
.map(clazz::cast)
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以像这样调用该方法:
List<Object> stuff = List.of("String", Integer.valueOf(3), Double.valueOf(42), new Object());
List<String> strings = filterType(stuff, String.class);
List<Number> numbers = filterType(stuff, Number.class);
Run Code Online (Sandbox Code Playgroud)
strings将只包含String和numbers将包含 2 个数值。