У меня есть метод с параметром
<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));
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Учу события кнопки и не могу решить задачу, тк не понимаю с областями видимости и со смыслом
UPDATED Как правильно записывать логи в файл в приложении, что проверяют тестировщики?
при генерации формы на jsp странице использую тег form:radiobuttons, в который передаю список с параметрами
Необходимо читать и писать данные в память sd карты (желательно иметь возможность указать адрес или смещение записи)SD карта без файловой системы