如何在我的实现中确保通用方法的类型?

时间:2017-11-07 03:11:52

标签: java generics interface

这是我第一次在这里提问,所以我希望我能正确发布一切。

我正在完成我的任务,而且我有点坚持这个问题。有四类形状(圆形,圆锥形,球形和矩形)都实现了GeometricShape接口....

public interface GeometricShape {
    public void describe();  
}

问题是向接口添加一个名为supersize()的新方法,该方法将采用当前形状并返回使用泛型的大小加倍的相同类型的形状。提示说要将界面概括为这样的开头......

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

因此T只能是几何形状。但是当这样做时,Rectangle.supersize()可以返回一个圆。如何通过仅修改接口代码来实现这一点(例如,Rectangle.supersize()只能返回Rectangle)?

1 个答案:

答案 0 :(得分: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()
   }
}