gpt4 book ai didi

java - 从接口(interface)定义中引用实现类

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

给定一个接口(interface)I:

interface I<T> {
public abstract T doSomthing(T other);
}

其中任何实现接口(interface) I 的类 C 将始终使用其自身 (C) 作为类型参数:

class MyClass implements I<MyClass> {

@Override
public MyClass doSomthing(MyClass other) {
return null;
}
}

有没有办法在每次新类实现接口(interface)时都显式传递类 C 作为参数来实现这一点?

换句话说,在接口(interface)中是否可以引用实现该接口(interface)的类?

最佳答案

tl;dr

你问:

Is there a way to accomplish this without explicitly passing the class C

不,不是在 Java 中。

例子

您似乎准确地描述了 Comparable<T> 的场景与 Java 捆绑在一起的接口(interface)。该接口(interface)有一个通用参数,用于比较两个对象的类型。该接口(interface)需要一个方法 compareTo​(T o) 采用相同泛型类型的单个参数。

让我们看一下 OpenJDK 源代码中的示例用法,the source code上课 Year .

该类将自己明确声明为 Comparable 上的比较类型正在实现接口(interface)。

public final class Year
implements Temporal, TemporalAdjuster, Comparable<Year>, Serializable {

compareTo方法明确引用它自己的类作为被比较的类型。

@Override
public int compareTo(Year other) {
return year - other.year;
}

你问:

Is there a way to accomplish this without explicitly passing the class C as the parameter every time a new class implements the interface?

看来答案是。实现类必须明确引用自己作为正在实现的接口(interface)的泛型类型的实现。

警告:(a) 我不是此类语言问题的专家。 (b) 我可能误解了你的问题。

关于java - 从接口(interface)定义中引用实现类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66877313/

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