开发者

Is this forbidden in Java Generics?

class Collator<S extends Stream<E extends Comparable<E>>> {
    S s;
    E e;

    public <S> Collator(List<S> streams){
        s = streams.get(0);
       开发者_如何学运维 e = s.read();
    }

    public <E> E next(){
        return e;
    }
}

interface Stream<E extends Comparable<E>>{
    public E read();
}

class Record implements Comparable<Record>{
    public Integer time;

    public int compareTo(Record r){
        return this.time.compareTo(r.time);
    }
}

Especially 1st line:

  class Collator<S extends Stream<E extends Comparable<E>>>

I expect to say:

Define a collator that works on Streams of Entries where each Entry implements comparable.


you miss-qualified the generic parameters

class Collator<S extends Stream<E>,E extends Comparable<E>> {
    S s;
    E e;

    public Collator(List<S> streams){
        s = streams.get(0);
        e = s.read();
    }

    public E next(){
        return e;
    }
}

interface Stream<E extends Comparable<E>>{
    public E read();
}

class Record implements Comparable<Record>{
    public Integer time;

    public int compareTo(Record r){
        return this.time.compareTo(r.time);
    }
}

this compiles

in particular the line class Collator<S extends Stream<E>,E extends Comparable<E>> it means a Collator that works on a S that is a Stream of E and E implement Comparable


Some glass ball guessing, since you don't show your error message:

Your constructor and method are declaring new type parameters <E> and <S> which are shadowing the type parameters of your class. Remove them.

Then, E should be a type parameter of your class, too.

class Collator<E extends Comparable<E>, S extends Stream<E>> {
    S s;
    E e;

    public Collator(List<S> streams){
        s = streams.get(0);
        e = s.read();
    }

    public E next(){
        return e;
    }
}

interface Stream<E extends Comparable<E>>{
    public E read();
}

class Record implements Comparable<Record>{
    public Integer time;

    public int compareTo(Record r){
        return this.time.compareTo(r.time);
    }
}


The problem is E extends Comparable

Define a collator that works on Streams of Entries where each Entry implements comparable of a given type:

public class Collator<T,E extends Comparable<T>, S extends Stream<E>> 
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜