2016-10-29 7 views
0

私は抽象化をよりよく理解し、問題にぶつかっています。Java汎用抽象メソッドのパラメータ

私は次のクラスがあります。

抽象クラス:

public abstract class Box { 
    abstract <T extends Mass> void putMassInBox(T mass); 
} 

実装:

public class CircleBox extends Box { 

    @Override 
    void putMassInBox(Mass mass) { 
     CircleMass circleMass = (CircleMass) mass; 
    } 

} 

それはようSquareMassを認識しないので、以下のいずれかが、エラーが発生しますミサ、または私はそれを行うには不正な方法を言っています。ここで

public class SquareBox extends Box { 

    @Override 
    void putMassInBox(SquareMass mass) { 
     // TODO Auto-generated method stub 

    } 

} 

は、マス・インターフェースです:

public interface Mass { 

} 

そして、ここではその実装である:

public class CircleMass implements Mass { 

} 


public class SquareMass implements Mass { 

} 

だから私はそれがある実装に基づいてパラメータを受け取るメソッドを強制したいです。私はcircleMassの例のように質量をキャストすることができることを知っていますが、それがそれを行う最善の方法であると思っていましたか?どのオブジェクトを別のオブジェクトに拡張するメソッドを強制することは可能ですか?それは余分な努力の価値があるのか​​、このような抽象化の標準的な方法を鋳造しているのですか?

答えて

3

あなたがいないメソッド、クラスはジェネリック行う必要があります。

public abstract class Box<T extends Mass> { 
    abstract void putMassInBox(T mass); 
} 

public class CircleBox extends Box<CircleMass> { 

    @Override 
    void putMassInBox(CircleMass mass) { 
    } 

} 
+0

これは非直感的なようだが、それは仕事をし、そしてそれを行うための正しい方法でなければなりませんので、あなたが、担当者のトンを持っていますもの。ありがとうございました! –

関連する問題