gpt4 book ai didi

Java静态方法似乎被设置为一个类型的实例? (句法)

转载 作者:行者123 更新时间:2023-12-03 20:47:27 33 4
gpt4 key购买 nike

在对 ComparableComparator 进行一些研究后,我遇到了一些看起来很有用的有趣语法(但我不明白)。

示例:

public static Comparator<Type> TypeComparer = new Comparator<Type>() {
public int compare(Type a, Type b) {
return a.compareTo(b);
}
}

我真的很想知道这里发生了什么。我绝不会想到在定义方法时使用 = 运算符。这是一种方法吗?还是包含方法的变量?

我将如何使用这个对象?如果我可以调用它,我应该期望返回什么?

如果您想查看原始示例,请参阅 Blog Post

最佳答案

TypeComparer不是静态方法,它是静态字段。

让我们逐个分析语法:

  • public static Comparator<Type> TypeComparer = ...声明一个字段。它的名字是TypeComparer , 类型是 Comparator<Type> .自 Comparator<T>是一个接口(interface),该字段接受任何实现该接口(interface)的类的实例。
  • new Comparator<Type>() { ... }此语法定义了一个新类并同时创建了它的实例。新定义的类没有名称(称为匿名内部类),它的唯一实例分配给 TypeComparer
  • public int compare(Type a, Type b) { ... }这是匿名比较器类的一个方法。它实现了 Comparator<T> 中的方法,这是完成类(class)所必需的。

您类(class)的用户可以使用 Comparator<Type> 的实例不知道它的确切类型,因为他们可以编程到它的接口(interface)(即调用它的 compare(...) 方法)。

注意:从 Java 8 开始,您可以将上面的示例缩短为一行:

public static Comparator<Type> TypeComparer = (a, b) -> {return a.compareTo(b);};

关于Java静态方法似乎被设置为一个类型的实例? (句法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48355933/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com