此语句中的第一个 <U> 是什么意思?
What does the first <U> in this statement mean?
public static <U> Predicate<U> isEqualsTo(U u) {
return s -> s.equals(u);
/*Predicate<U> return type
U u is the parameter
s-> s.equals(u) is the lambda expression */
}
Predicate<U>
之前的第一个 <U>
是什么意思?
这是方法的通用类型。例如,不那么复杂的东西:
public static <U> void doSomething(U u) {
System.out.println(u);
}
您可以在 Java 中参数化您想要的任何函数,就像您在 类 中所做的那样。它不仅适用于静态方法,还适用于实例方法。您可以这样调用函数:
<String>doSomething("hello");
<Integer>doSomething(42);
很棒的是,类型推断在 Java 中使用泛型方法时非常有效,因此您可以像这样调用上面的函数:
doSomething("hello,world");
doSomething(42);
不告诉编译器你使用的是什么类型。
查看文档here.
它表示该方法是通用的,因此可以return调用时指定的任何指定类型。
见https://docs.oracle.com/javase/tutorial/java/generics/methods.html
第一个 <U>
声明了您的方法的通用类型 U
。它是一个替代静态类型定义的占位符。
有了这个泛型函数,您现在可以使用任何类型的输入,因为您的输入参数 u
的类型是我们的泛型占位符 U
。
此泛型函数的输出被定义为另一个泛型对象,Predicate<>
的一个实例,但使用我们用作输入类型的相同泛型类型 U
进行参数化。
// | generic type(s) of this method
// |
// | | type of return value | type of parameter
// \___\____________ \_
public static <U> Predicate<U> isEqualsTo(U u) {
return s -> s.equals(u);
}
假设您有
public abstract class Predicate<T>
{
public static <U> Predicate<U> isEqualsTo(U u) {
return null;
}
public static void isNotEqualsTo(Object u) {
}
}
然后 return 类型必须与您传递的相同。
public class Temp
{
public static void main(String args[])
{
Predicate<String> str=Predicate.isEqualsTo(new String("ewrqe"));
Predicate<Integer> integer=Predicate.isEqualsTo(new Integer(200));
Predicate.isNotEqualsTo(new String("ewrqe"));
Predicate.isNotEqualsTo(new Integer(200));
}
}
public static <U> Predicate<U> isEqualsTo(U u) {
return s -> s.equals(u);
/*Predicate<U> return type
U u is the parameter
s-> s.equals(u) is the lambda expression */
}
Predicate<U>
之前的第一个 <U>
是什么意思?
这是方法的通用类型。例如,不那么复杂的东西:
public static <U> void doSomething(U u) {
System.out.println(u);
}
您可以在 Java 中参数化您想要的任何函数,就像您在 类 中所做的那样。它不仅适用于静态方法,还适用于实例方法。您可以这样调用函数:
<String>doSomething("hello");
<Integer>doSomething(42);
很棒的是,类型推断在 Java 中使用泛型方法时非常有效,因此您可以像这样调用上面的函数:
doSomething("hello,world");
doSomething(42);
不告诉编译器你使用的是什么类型。
查看文档here.
它表示该方法是通用的,因此可以return调用时指定的任何指定类型。
见https://docs.oracle.com/javase/tutorial/java/generics/methods.html
第一个 <U>
声明了您的方法的通用类型 U
。它是一个替代静态类型定义的占位符。
有了这个泛型函数,您现在可以使用任何类型的输入,因为您的输入参数 u
的类型是我们的泛型占位符 U
。
此泛型函数的输出被定义为另一个泛型对象,Predicate<>
的一个实例,但使用我们用作输入类型的相同泛型类型 U
进行参数化。
// | generic type(s) of this method
// |
// | | type of return value | type of parameter
// \___\____________ \_
public static <U> Predicate<U> isEqualsTo(U u) {
return s -> s.equals(u);
}
假设您有
public abstract class Predicate<T>
{
public static <U> Predicate<U> isEqualsTo(U u) {
return null;
}
public static void isNotEqualsTo(Object u) {
}
}
然后 return 类型必须与您传递的相同。
public class Temp
{
public static void main(String args[])
{
Predicate<String> str=Predicate.isEqualsTo(new String("ewrqe"));
Predicate<Integer> integer=Predicate.isEqualsTo(new Integer(200));
Predicate.isNotEqualsTo(new String("ewrqe"));
Predicate.isNotEqualsTo(new Integer(200));
}
}