有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java这句话的第一个<U>是什么意思?

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>是什么意思


共 (4) 个答案

  1. # 1 楼答案

    第一个<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);
    }
    
  2. # 2 楼答案

    这是该方法的通用类型。例如,一些不那么复杂的东西:

    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.

  3. # 4 楼答案

    假设你有

    public abstract class Predicate<T> 
    {
    
        public static <U> Predicate<U> isEqualsTo(U u) {
            return null;
        }
        public static void isNotEqualsTo(Object u) {
    
        }
    }
    

    那么返回类型必须与您传递的相同

    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));
        }
    }