如何在java中自动向下转换类?

toiithl6  于 2023-06-28  发布在  Java
关注(0)|答案(1)|浏览(90)

如何在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做这件事,所以我忘记了我做了什么。我记得我设法在没有类型检查的情况下解决了它。所以,不管父类有多少个子类,一行代码都可以工作。

i34xakig

i34xakig1#

你可以滥用泛型来实现类似这样的东西:

private static <F, T extends F> T cast(F value) {
    return (T) value;
}

现在你可以

Parent father = new Boy();
Parent mother = new Girl();
Boy kid = cast(father);
Girl kiddette = cast(mother);

这是因为编译器从kid变量推断出目标类型。这也很危险,(T) value上生成的警告证明了这一点:“未检查演员:F到T总的来说,你不想这样做。您所做的一切只是欺骗编译器进行通常不允许的强制转换。

相关问题