1
は、次のデータ型を考えてみましょう変換することはできませんジェネリックは、
import java.util.ArrayList;
import java.util.List;
public class MyIntervalList<T extends Comparable<T>> extends MyList<IInterval<T>> {
public List<? extends IInterval<T>> getIntersect(T begin, T end) {
List<IInterval<T>> res = new ArrayList<>();
for (IInterval v : data) {
if (v.getEnd().compareTo(begin) < 0 ||
v.getBegin().compareTo(end) > 0) {
res.add(v);
}
}
return res;
}
}
次にしてみましょう使用例をaveの:
import java.util.List
class Interval implements IInterval<Integer> {
private int begin, end;
public Interval(int begin, int end) {
this.begin = begin;
this.end = end;
}
public Integer getBegin() {
return begin;
}
public Integer getEnd() {
return end;
}
}
public class Test {
public static void main(String[] args) {
MyIntervalList<Integer> t = new MyIntervalList<>();
t.add(new Interval(1, 10));
List<Interval> l = t.getIntersect(1, 4);
}
}
私はこれをコンパイルすると、私はエラーを取得:
Test.java:8: error: incompatible types: List<CAP#1> cannot be converted to List<Interval>
List<Interval> l = t.getIntersect(1, 4);
^
where CAP#1 is a fresh type-variable:
CAP#1 extends IInterval<Integer> from capture of ? extends IInterval<Integer>
1 error
Interval
として実装IInterval<Integer>
とgetIntersect
が? extends IInterval<T>
を返すように宣言され、Integer
がT
として渡された、私はこれを行う正しい方法だと思ったが、明らかに私は間違っている。
誰でも正しい方法を説明できますか?
あなたが正しいと仮定しましょう。 'ArrayList'のインスタンスが 'getIntersect'メソッド(' Interval2'は 'IInterval 'の別の実装です)によって返されたらどうなるでしょうか? –
Karol
問題があることを認識しています...これを正しく行う方法に関する提案はありますか? –
これはあなたが期待しているものによって異なります。あなたの変数の型を 'List <?次のように定義されています。extendnterval> intersect = t.getIntersect(1,4); '?それはあなたの要件を満たしていますか? –
Karol