java - 我怎样才能让一个接口(interface)实例方法只接受同一个类的参数,真的吗?

标签 java generics interface

SO discussion提出以下成语:

public interface IComparable<T extends IComparable<T>> {
    int compare(T t);
}

然后允许:

public class Foo implements IComparable<Foo> {
    public int compare(Foo foo) {
        return 0;
    }
}

但是,这个习语允许的不仅仅是上面的,因为下面的代码也可以编译:

class A implements IComparable<A> {
    public int compare(A a) {return 0;}
}

public class Foo implements IComparable<A> {

    public int compare(A a) {
        return 0;
    }
}

因此(除非我误解了什么)与远不那么戏剧化的成语相比,原始成语并没有真正买到任何东西:

public interface IComparesWith<T> {
    int compare(T t);
}

public class A implements IComparesWith<A> {
    public int compare(A a) {...}
}

那么,有没有一种方法可以实际声明一个接口(interface),使得任何声明实现它的类都有一个方法来与它自己的类的对象进行比较,而没有任何像上面那样的漏洞?

我显然不能将以上内容作为评论发布,因此我创建了一个新帖子。

最佳答案

不,这种限制对于所写的泛型是不可能的。您的评估对我来说似乎是正确的。

关于java - 我怎样才能让一个接口(interface)实例方法只接受同一个类的参数,真的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18553621/

相关文章:

generics - 在 kotlin 中,测试泛型类型的值是否实现接口(interface),然后将其用作该接口(interface)的正确方法是什么?

java - 为什么我的 java 类实现了我不期望的方法?

arrays - 如何使用 typescript 的字符串索引接口(interface)?

java - 我可以在 for 和 switch 语句之外声明和初始化 ImageView 并在其中设置其属性吗?

java - IndexMinPQ 目的算法 4 由 Sedgwick 和 Wayne 编写

java - Android camera : Threads? 哪个应该做什么

java - Intellij IDEA 是否有一个热键来生成 bean mutators/contsructors/toString/etc 方法?

generics - 除了使用具有关联常量的特征之外,是否有更简单的方法来为通用结构配备常量?

java - 将 JAXB、泛型和反射结合到 XML 序列化我所有的 Java 类

reflection - 我们如何使用空接口(interface)指向的实际类型在 Go 中创建该类型的新实例?