2013-08-19 8 views
6

javaジェネリックでタイプパラメータを強制的に実装してequalsメソッドを実装する方法はありますか? たとえば、public class Bag<Item> implements Iterable<Item>containsメソッドを持つこのクラスはItem.equalsメソッドを使用して作成しました。だから私はジェネリックスの渡されたオブジェクトもequalsメソッドを実装することを確認したいと思います。javaジェネリックスで特定のメソッドを実装するための型パラメータを強制的に

+4

に等しいです。 –

+12

すべてのオブジェクトはすでに 'equals()'を実装しています。 – kiheru

+2

渡されたオブジェクトは強制的に 'equals'を上書きしなければならないということを意味すると思いますが、これは...うーん、奇妙です。 – GGrec

答えて

8

ItemBaseという名前の抽象基本クラスを作成し、abstractをequalsにしてからItem extend ItemBaseとすることができます。

public abstract class ItemBase { 

    @Override 
    public abstract boolean equals(Object o); 
} 

public class Bag extends ItemBase 

これは、特に実装するItemBaseを実装誰を強制するには、あなたが**インターフェイス**クラスを作成し、typeパラメータとしてそれを渡したいでしょう

+3

Javaがこれを許可する理由を知りたいですか?私にとって、それはポリモーフィズムのかなりの違反であり、最小の驚きの原則に違反しています(どうしてそれはインターフェイスとどう違うのですか?) –

+1

私自身の質問に答えるために、JLSによって明示的に許可されています抽象メソッドでオーバーライドすることができます。」*)、いくつかの例があります:http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#d5e10777。私はまだ値を疑問に思う。 –

+1

今日は何かを学びました。 – allprog

関連する問題