求教一个 Java generic 的问题

2017-08-04 10:11:57 +08:00
 aznfy

public class FirstClass <E extends Comparable< E>, T extends SecondClass< E>>

如果我想声明 T 也是 Comparable 的应该怎么样才能做到啊?是不是没有可能。。。

2732 次点击
所在节点    Java
7 条回复
kuko126
2017-08-04 10:30:20 +08:00
public class FirstClass <E extends Comparable< E>, T extends SecondClass< E>&Comparable<E>>
https://stackoverflow.com/questions/745756/java-generics-wildcarding-with-multiple-classes
aznfy
2017-08-04 10:35:48 +08:00
@kuko126 我是想申明 T 也是可以和 T 互相比较
kuko126
2017-08-04 10:43:42 +08:00
@aznfy 那是要这样子的?
public class FirstClass<E extends Comparable<E>, T extends SecondClass<E> & Comparable<T>> {

public void compare(T t1, T t2) {
t1.compareTo(t2);
}

}
aznfy
2017-08-04 10:48:56 +08:00
@kuko126 是的是的,但是怎么写都无法通过编译,这样也不行
momocraft
2017-08-04 10:49:10 +08:00
T 可以同时有 Comparable<T> 和 Comparable<E> 吗?不会无法重载吗?
ahill
2017-08-04 10:52:57 +08:00
SecondClass 实现 Comparable 不行吗
这样 T 不就也是实现 Comparable 的了吗
kuko126
2017-08-04 11:01:21 +08:00
@aznfy 第二个里面 T 只是 Comparable<T>的子类 如果你的 SecondClass 实现了 Comparable<E>那就不行了
下面代码可以编译通过
public class FirstClass<E extends Comparable<E>, T extends SecondClass<E> & Comparable<T>> {
public void compare(T t1, T t2) {
t1.compareTo(t2);
}

public static void main(String[] args) {
FirstClass<String, ThirdClass> firstClass = new FirstClass<>();
ThirdClass t1 = new ThirdClass(1);
ThirdClass t2 = new ThirdClass(2);

firstClass.compare(t1, t2);
}

static class ThirdClass extends SecondClass<String> implements Comparable<ThirdClass> {
int i;

public ThirdClass(int i) {
this.i = i;
}

@Override
public int compareTo(ThirdClass o) {
return 0;
}
}

}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/380334

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX