どのようにjavaで制約を追加してジェネリッククラスを拡張する?

私はBinaryTreeクラスを拡張してIntegerパラメータだけが受け入れられ、コードを再利用できるようにしたい。

public class BinaryTree>  
{/*code omitted for convenience*/}  
public class BinaryTreeInt extends BinaryTree  
{/*code omitted for convenience*/}

私はコンパイル時にエラーが発生します。

BinaryTreeInt.java:1: type parameter T is not within its bound
public class BinaryTreeInt extends BinaryTree
                                                                 ^
1 error

誰かがそのような継承のコードを書く方法を指導できますか?

0
2番目のクラスが一般的な理由は何ですか?
追加された 著者 SLaks,
は確かですか?整数は最終クラスなので意味がない
追加された 著者 mmounirou,

2 答え

整数は最終的なものなので、あなたは何ですか?

public class BinaryTreeInt extends BinaryTree

However the type implies its is int rather than Integer

2
追加された
@パブロ:私の答えを参照してください。
追加された 著者 SLaks,
@ user877856:いいえ。それはなぜではありません。これは T Comparable を拡張するように制約されていないためです。私の答えを見てください。
追加された 著者 SLaks,
確かに、しかし、なぜ質問のコードは、コンパイルエラーを取得しますか?
追加された 著者 Pablo,
私はTがIntegerを拡張できず、したがってComparableを実装できないからだと思います。
追加された 著者 tj-recess,

この問題は、次の潜在的なクラスに起因します。

class FunnyNumber extends Integer { }

This class does not extend Comparable, so it can't be used as the base T.
In other words, extends Comparable is not the same as extends Comparable.

Your second class should not be generic at all.
You should only use generics if you want to vary the type parameter.
Here, you want a single fixed type, so you should make a normal non-generic class that extends BinaryTree. (or just use BinaryTree directly and don't make a separate class at all)

1
追加された
@Pablo: Integer が封印されているという事実を無視して、このクラスは派生 T が基本制約を満たさない例です。
追加された 著者 SLaks,
あなたが正しい;私はあまりにもC#に慣れています。ありがとう。
追加された 著者 SLaks,
私はmissins何かを明らかにする必要がありますが、私はあなたが言うことを得ることはありません。投稿したコードは意味をなさない、コンパイルされません。
追加された 著者 Pablo,
OK、FunnyNumberはIntegerを拡張すると書いていたと思います。今、私は、Comparable aを理解しています。比較可能 b; a = b;コンパイルされませんでした。
追加された 著者 Pablo,