类类型作为Java中的参数

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)

是否可以?我怎样才能做到这一点?

Joa*_*uer 6

您必须提供一个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将只包含Stringnumbers将包含 2 个数值。