Java函数接口函数中语句的含义

y3bcpkx1  于 2023-06-28  发布在  Java
关注(0)|答案(4)|浏览(116)

我最近在学习Java中的函数接口,所以是***函数***接口。当我在其中遇到identity static method的定义时,第一件让我困惑的事情是:

static <T> Function<T, T> identity() {
        return t -> t;
    }

返回类型中的Function<T,T>是什么意思?函数定义中的小写t从何而来?详细的解释总是有帮助的。

fivyi3re

fivyi3re1#

static <T> Function<T, T> identity() {

第一个<T>声明了一个类型变量。它类似于声明一个普通变量,例如:

void foo() {
  int x; // this declares a variable
}

除了:

  • 它被称为T
  • 正常变量指的是一个值。类型变量指的是一种类型,因此命名为“类型变量”。int x;的意思是:“x代表int值;在这里你可以写例如5 + 2你也可以写5 + x,你可以用任何值x代替'2'-一个类型变量代替一个类型。在通常写String z;的地方,你可以写T z;-意思是:z是变量。这个变量的类型是T typevar表示的任何类型。
  • 它没有边界-这意味着T可以是任何非原始类型。Object,Number,InputStream,SomeTypeIDeclared,任何你想要的。

与实际变量不同,类型变量是编译器想象出来的。编译器使用它们来使代码有意义,并更好地进行类型检查。运行时(java.exe)对它们不做任何处理。
因此,它们用于连接事物:你用它们来表示:"此方法接受一个参数并返回一个值。参数的类型可以是您想要的任何类型;这个方法返回的类型与你传入的类型相同。举个例子
这里,检查Function的javadoc,它的第一个类型参数是函数的 * input * 的类型,第二个是 * output * 的类型。
我们在这里需要<T>的唯一原因是将em连接起来:我们想表达一个函数的概念,它的输入类型与输出类型相同。如果我们考虑identity()方法的作用,这是显而易见的:它返回一个只返回其输入的函数。因此,其输出的类型自然与其输入的类型相同。

return t -> t;

这定义了一个函数-它是lambda语法。它是以下的简写:

class MyAnonymousType<T> implements Function<T, T> {
  public T apply(T t) {
    return t;
  }
}

return new myAnonymousType<T>();

第一个tapply(T t)中的T t的缩写-没有必要写apply,因为编译器知道你试图返回一个java.lang.function.Function,这是一个函数接口(只有一个方法的接口)-它知道你想要实现这个方法,所以不需要指定它的名称,编译器可以弄清楚。出于同样的原因,您不需要T-编译器会从函数接口中的一个方法的签名中找出它。
->的缩写是:......现在是Function接口中的这个方法的实现。实现简单地是t-return t;的缩写(return是隐含的 * 除非 * 您添加大括号)。你也可以这样写:

return t -> {
  return t;
};

甚至:

return (T t) -> {
  return t;
};

如果这能帮你理清头绪的话
最终的结果是一个函数(名为identity),它返回一个函数(我们在这里得到了一点元!)-返回的函数将适应你所想到的任何特定类型,只要你正在寻找一个返回与它所接受的类型相同的函数,并且你想要这样一个函数的实现,它只是逐字返回输入(这自然意味着返回的东西与提供的东西具有相同的类型)。

pqwbnv8z

pqwbnv8z2#

javadoc
这是一个函数接口,因此可以用作lambda表达式或方法引用的赋值目标。
该函数包含4个方法:

  • apply()
  • getString()
  • compose()
  • identity()

identity()
此方法返回一个函数,该函数返回其唯一的参数。
语法:
static <T> Function<T, T> identity()
其中T表示参数的类型和要返回的值
返回:此方法返回一个函数,该函数返回自己的参数

vuktfyat

vuktfyat3#

让我们看一下Function接口定义
public interface Function<T, R> {}**<T,R>**意味着这个接口可以接受任何类型的类T,并返回不同的类型R(不强制输出类型与输入相同)
返回类型中的Function<T,T>是什么意思?
我们返回一个接受并返回相同类型对象的函数。强制相同Type
函数定义中的小写t从何而来?
这是lambda表达式,因为Function是函数接口,只有一个抽象方法apply(T t),它接受一个输入t,我们返回相同的输入。这是一个lambda表达式,它等价于

static <T> Function<T, T> identity() {
        return new Function<>() {
            @Override
            public Object apply(Object t) {
                return t;
            }
        };
    }
1yjd4xko

1yjd4xko4#

当有疑问时,总是先查阅文档-Function
<T> Function<T, T>表示函数,其返回类型与输入类型相同。
t -> t是一个lambda表达式,定义了函数,它意味着你返回输入。这在docs中也有解释:
返回一个始终返回其输入参数的函数。
此外,您还应该通过Oracle的lambda表达式教程-Lambda Expressions

相关问题