У меня есть метод с параметром
<T> void testMethod(Consumer<T> arg) {
T t = ???;
arg.accept(t);
}
Как создать объект типа T при условии что T имеет конструктор по умолчанию?
Вот код, который я испытывал
public class MethodConsumer {
private <T> void test(T t) { // Consumer<T>
System.out.println("test()"+t);
};
<T> void testMethod(Consumer<T> arg) {
T t = null;
arg.accept(t);
}
public static void main(String[] args){
MethodConsumer test = new MethodConsumer();
test.testMethod((t) -> test.test(t));
}
}
Вообще то, то что вы пытаетесь сделать запрещено, читайте туториал
You cannot create an instance of a type parameter.
Оно и понятно, шаблон не живет сам по себе, он живет только с конкретным типом.
В вашем случае рабочий код может выглядеть приблизительно так:
<T> void testMethod(Consumer<T> arg, Class<T> clazz) {
T t = clazz.newInstance(); //надо ловить эксепшн
arg.accept(t);
}
Обратите внимание, что во втором параметре мы указываем тип T
А вызов его типа, так:
String s="blabla";
test.testMethod(arg, s.class);
<T> void testMethod(Consumer<T> arg) {
T t = ???;
arg.accept(t);
}
В этом случае попытка создать новый экземпляр класса противоречит самой идее шаблонов.
Шаблоны нужны для того, чтобы отвязать алгоритм работы с данными от конкретной реализации данных. Например LinkdList'у без разницы что у него внутри, алгоритм для всех типов данных один и тот же. Шаблон работает с любым типом данных, но нельзя создать объект любого типа, потому что непонятно что создавать.
Если вам нужно работать с каким-то конкретным типом данных, то его и используйте.
public class MethodConsumer {
class MyClass{
}
private <T> void test(T t) { // Consumer<T>
System.out.println("test()"+t);
};
void testMethod(Consumer<MyClass> arg) {
MyClass t = new MyClass();
arg.accept(t);
}
public static void main(String[] args){
MethodConsumer test = new MethodConsumer();
test.testMethod((t) -> test.test(t));
}
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости