繁体   English   中英

Java泛型转换

[英]Java generic casting

我有一个通用类A<T>和一个子类B扩展了A<String> 类A有一个返回此值的方法(所以是A<T> )。 问题是,如果我在B对象上调用该方法,它将返回A<String>并且必须转换为B,但是B与A<String>相同,不是吗? 所以我不必抛...

如果您的方法返回A<String>则它可以是类型B的对象, 但不必一定是!

如果您有超一流的类型carBMW extends car

考虑一家制造汽车的工厂。 该方法可以返回汽车 - 可以是BMW,但不必是BMW

我重写了该方法并强制转换了返回的值,这样我就不必在任何地方都要做。 谢谢@AndyTurner

您甚至不必投。 您可以重写该方法并将返回类型更改为B,因为它仍然是A<String> ,它是A<T> ,因此它对B有效。

class A<T> {

    public A<T> return_this() {
        return this;
    }

}

class B extends A<String> {

    @Override
    public B return_this() {
        return this;
    }


}

因此,您可以执行以下操作:

B b = new B();
A<String> a = b.return_this(); //Because B extends A<String>
B b = b.return_this();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM