gpt4 book ai didi

java - Comparable接口(interface)的泛化

转载 作者:行者123 更新时间:2023-12-02 10:45:15 24 4
gpt4 key购买 nike

身份接口(interface)几年前就在系统中实现了。至此,我们得到了每个身份应该是可比较的必要性。其中一个选项是向身份声明添加额外的 & Comparable 类型:

interface Identity<K> {

}

class Handler<T extends Identity<?> & Comparable<T>> {

Handler(T value) {
Util.<T>handle(value);
}
}

class Handler2<T extends Identity<?> & Comparable<T>> {

Handler2(T value) {
Util.<T>handle(value);
}
}

interface Util {

static <T extends Comparable<T>> void handle(T value) {
}
}

主要缺点之一是需要使用相同的信息(例如&Comparable)来增强大量代码。更优雅的解决方案是使用 Identity one 扩展 Comparable 接口(interface):

interface Identity<K> extends Comparable<Identity<K>>{

}

但在这种情况下,Handler 类将突出显示编译错误:

error: method handle in interface Util cannot be applied to given types; required: T#1 found: T#2 reason: explicit type argument T#2 does not conform to declared bound(s) Comparable where T#1,T#2 are type-variables: T#1 extends Comparable declared in method handle(T#1) T#2 extends Identity declared in class Handler

这种情况下可能的解决方案是什么?

最佳答案

Identity更改为您建议的内容后

interface Identity<K> extends Comparable<Identity<K>>{

}

你有两个选择。要么:

class Handler<T, U extends Identity<T>>
{
Handler(U value) {
Util.handle(value);
}
}

使用示例:

Handler<String, Identity<String>> stringHandler = new Handler<>(new FooIdentity());

class Handler<T>
{
Handler(Identity<T> value)
{
Util.handle(value);
}
}

使用示例:

final Handler<String> stringHandler = new Handler<>(new FooIdentity());

并且Util可以保持不变。

关于java - Comparable接口(interface)的泛化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52630628/

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