我有一个带参数的方法
<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));
}
}
实际上,您尝试做的事情是被禁止的,请阅读教程
可以理解,模板不是独立存在的,它只存在于特定的类型中。
在您的情况下,工作代码可能如下所示:
请注意,在第二个参数中我们指定了类型
T
以及其类型的调用,如下所示:
在这种情况下,试图创建一个类的新实例与模板的想法背道而驰。
为了将处理数据的算法与特定的数据实现分离,需要模板。例如,LinkdList 并不关心它里面有什么,所有数据类型的算法都是一样的。该模板适用于任何类型的数据,但您不能创建任何类型的对象,因为不清楚要创建什么。
如果您需要使用特定的数据类型,请使用它。