如何在Java中自动向下转换?
看看这个例子:
public class Parent {}
public class Boy extends Parent {}
public class Girl extends Parent {}
Parent father = new Boy();
Parent mother = new Girl();
Boy kid = (Boy)father;
Girl kiddette = (Girl)mother;
我知道我可以像上面的例子一样手动向下转换,但是,我如何自动做到这一点?
所以,我想要的是一个autocast方法,类似于这样:
public ? downcast(? parent) { return ? parent; }
我会这样使用:
Boy kid = downcast(father);
Girl kiddette = downcast(mother);
因此,我不想在调用方的方法中执行任何显式的类型转换。我需要downcast
来隐藏铸造本身。我希望避免在downcast
方法中进行类型检查(instanceof
),因此,如果向下转换可以被推广,那就太好了。
我需要放置什么来代替?
,?
和?
来使它工作。
我记得大约10年前我用Java做过同样的事情,我记得我对代码感到困惑,但它工作了,我不明白它是如何工作的,但在过去的10年里,我不需要再用Java做这件事,所以我忘记了我做了什么。我记得我设法在没有类型检查的情况下解决了它。所以,不管父类有多少个子类,一行代码都可以工作。
1条答案
按热度按时间i34xakig1#
你可以滥用泛型来实现类似这样的东西:
现在你可以
这是因为编译器从
kid
变量推断出目标类型。这也很危险,(T) value
上生成的警告证明了这一点:“未检查演员:F到T总的来说,你不想这样做。您所做的一切只是欺骗编译器进行通常不允许的强制转换。