Shape是一个抽象基类。上面两个不都是以Shape为类型添加的吗,他们有什么区别吗

解决方案 »

  1.   

    public <T extends Shape> T add()
    T是泛型,是指继承了Shape的任何类型都可以。
    public Shape add()
    是返回Shape这种类型。
    当然,你在实际操作的过程中也可以返回它的子类。获取到后要再强制类型转化才可以。而上面的方式不用强制类型转化。
      

  2.   


    really?public <T extends Shape> T add()只是说返回的是Shape的子类型,但是没有指明是哪一个子类型,因此不可以返回任何的类型,除了null。这样会报错:
    public <T extends Shape> T add(){
            return new Shape();
    }
    必须还得明确的指出来是返回那一种类型才可以:
    public <T extends Shape> T add(){
            return (T)new Shape();//这里的强转不可少
    }
      

  3.   

    话说goldenfish1919大侠 请教一下:
    楼主的这个泛型方法是相当于向下转型了吧,不进行运行时类型判断就转型是不是会崩溃啊??