【发布时间】:2016-07-12 07:48:48
【问题描述】:
我正在学习 Java 中的 lambda 表达式,但是,我曾考虑将它与泛型类型一起使用。 (例如 int、String)。据我学习和研究在 Java 中使用 lambda 表达式,它必须在接口中声明。然后,在您想使用的地方定义它的实现。 (即(prototype args) -> {definition})。我试过只写带有类型问题的基本示例,如下所示。我只是想将它与String、int 类型一起用作练习。但是,我无法将泛型类型初始化为0。我可以为null 做。我不确定null 是否等于0。问题如何解决?
public class Test<T,U> {
public static <T,U> void main(String[] args) {
Test myTest = new Test();
Str myHello = (message1, message2) -> {
System.out.println("Hello " + message1 + message2);};
myHello.welcome("Mr. ", "rickroll");
MyGen addition = (U... operationArgs) -> {
T sum = 0;
for (U i : operationArgs) {
sum += i;
}
return sum;};
System.out.println("2+3+4+5 = " + myTest.operate(addition, 2, 3, 4, 5));
System.out.println("A.....gl ?" + myTest.operate(addition, "b", "c", "d", "e", "f"));
}
private T operate(MyGen choice, U... args) {
return (T)choice.asYouWish(args);
}
interface Str {
public void welcome(String a, String b);
}
interface MyGen<T,U> {
public T asYouWish(U... args);
}
}
【问题讨论】:
-
将泛型类型初始化为
0没有意义。如果T是List<String>类型怎么办? -
如果您了解 C++,请不要将 Java 泛型与您从 C++ 中的模板中了解的内容混淆。 Java 泛型不像 C++ 模板。您不能将
0分配给T类型的变量,因为T可以是任何类型,并且您不能将0分配给任何任意类型。+=也不能用于任意类型。 -
不,不是。
T可以是任何东西。我可以创建一个新实例:new Test<List<String>, 2DPoint>()
标签: java generics lambda java-8