V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
aznfy
V2EX  ›  Java

求教一个 Java generic 的问题

  •  
  •   aznfy · 2017-08-04 10:11:57 +08:00 · 2761 次点击
    这是一个创建于 2698 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    7 条回复    2017-08-04 11:01:21 +08:00
    kuko126
        1
    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
        2
    aznfy  
    OP
       2017-08-04 10:35:48 +08:00
    @kuko126 我是想申明 T 也是可以和 T 互相比较
    kuko126
        3
    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
        4
    aznfy  
    OP
       2017-08-04 10:48:56 +08:00
    @kuko126 是的是的,但是怎么写都无法通过编译,这样也不行
    momocraft
        5
    momocraft  
       2017-08-04 10:49:10 +08:00
    T 可以同时有 Comparable<T> 和 Comparable<E> 吗?不会无法重载吗?
    ahill
        6
    ahill  
       2017-08-04 10:52:57 +08:00
    SecondClass 实现 Comparable 不行吗
    这样 T 不就也是实现 Comparable 的了吗
    kuko126
        7
    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;
    }
    }

    }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2996 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 14:10 · PVG 22:10 · LAX 06:10 · JFK 09:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.