Java 从接口定义引用实现类
给定一个接口Java 从接口定义引用实现类,java,kotlin,inheritance,Java,Kotlin,Inheritance,给定一个接口I: 接口I{ 公共摘要(其他); } 其中,实现接口I的任何类C将始终使用自身(C)作为类型参数: 类MyClass实现I{ @凌驾 公共MyClass doSomthing(MyClass其他){ 返回null; } } 有没有一种方法可以在每次新类实现接口时不显式地将类C作为参数传递 换句话说,在接口中是否可以引用实现该接口的类?tl;博士 你问: 有没有一种方法可以在不显式传递类C 不,不是用Java 例子 您似乎准确地描述了与Java捆绑的接口的场景。该接口有一个通用参
I
:
接口I{
公共摘要(其他);
}
其中,实现接口I
的任何类C
将始终使用自身(C
)作为类型参数:
类MyClass实现I{
@凌驾
公共MyClass doSomthing(MyClass其他){
返回null;
}
}
有没有一种方法可以在每次新类实现接口时不显式地将类C
作为参数传递
换句话说,在接口中是否可以引用实现该接口的类?tl;博士
你问:
有没有一种方法可以在不显式传递类C
不,不是用Java
例子
您似乎准确地描述了与Java捆绑的接口的场景。该接口有一个通用参数,用于比较两个对象的类型。该接口需要一个方法,该方法使用同一泛型类型的单个参数
让我们看一下OpenJDK源代码for类中的一个示例用法
该类明确声明自己是正在实现的Comparable
接口上的比较类型
公共期末学年
实现时态、时态调整、可比较、可序列化{
compareTo
方法显式引用自己的类作为被比较的类型
@覆盖
公共国际比较(其他年份){
返回年份-其他年份;
}
你问:
有没有一种方法可以在每次新类实现接口时不显式地将类C作为参数传递
答案似乎是否定的。实现类必须将自己明确地引用为正在实现的接口的泛型类型的实现
警告:(a)我不是这类语言问题的专家。(b)我可能误解了你的问题。补充另一个答案:你所描述的是自我类型。 其他一些语言也有(例如) 但恐怕科特林没有。 (也可以是Java。) 有可能将其添加到Kotlin的未来版本中;似乎其潜在用途不够广泛,不值得使用,但似乎还没有达成最终共识
通常的解决方法是使用类似C++调用的类型参数。 在Java或Kotlin中,它并不像这个问题所说明的那样是类型安全的,但是。
这就是所谓的。它可以用Java和Kotlin声明 爪哇:接口I{
公开摘要T剂量测定法(T其他);
}
科特林:
接口I{
有趣的事(其他:T):T
}
但这并不意味着,在您声明类并实现此接口时可以忽略泛型参数。它只是对类型施加了额外的限制,您将作为泛型参数传递(将其缩小为仅一种类型)。无论是Kotlin还是Java都不支持类声明的类型推断
另请参见:有没有真正做到这一点的语言?它的冗长是有原因的(主要是因为它会在继承过程中造成混乱)。在Kotlin中也是一样的,无法做到,所以您是对的。