2017-11-07 5 views
0

これは初めての質問ですので、すべてを正しく投稿していただきたいと思います。私の実装で汎用メソッドのタイプを保証する方法を教えてください。

私は自分の課題に取り組んでいますが、私はこの問題に少しだけ取り組んでいます。すべての....

public interface GeometricShape { 
    public void describe(); 
} 

をインタフェースGeometricShapeを実装質問がインターフェイスにスーパーと呼ばれる新しいメソッドを()を追加すると言うこと形状の4つのクラス(円、コーン、球、及び長方形)、これがあります。現在の形状を受け取り、ジェネリックを使用して同じサイズの2倍の形状を返します。ヒントは、このようなインタフェースを一般化するためのものです...

public interface GeometricShape<T extends GeometricShape<T>> { 
    public void describe(); 
    public T supersize(); 
} 

Tは幾何学的形状にしかなりません。しかし、このようにすると、Rectangle.supersize()が円を返すことができます。これが起こらないようにするにはどうすればいいですか(例えば、Rectangle.supersize()はインターフェイスコードを変更するだけでRectangleを返すことができます)

答えて

1

トリックはインターフェイス定義ではなく、クラス宣言にあります。矩形の

、そのように定義する:

public class Rectangle implements GeometricShape<Rectangle> { 
    public void describe() {// do stuff} 
    public Rectangle supersize() { 
     return new Rectangle() 
     //this should fail since you have specified T 
     //return new Circle() 
    } 
} 
関連する問題