gpt4 book ai didi

Java泛型方法在运行时转换为参数类型,这可能吗?

转载 作者:搜寻专家 更新时间:2023-11-01 01:14:49 24 4
gpt4 key购买 nike

我有一个看起来像这样的方法

 public static <T extends MyClass, X extends AnotherClass> List<T> (Class<T> aParameter, X anotherParameter)

现在如果 AnotherClass 是一个没有定义 getId 的抽象类,但是每个扩展这个接口(interface)的类都有。 (别问我为什么要这样设计,抽象类不是我设计的,我也不允许改)。

我怎样才能做这样的事情

anotherParameter.getId();

我知道我必须将它转换到类中,但是我必须对每个可能的类进行 instanceof 检查然后转换它。

所以我知道我有类似的东西:

if (anotherParameter instanceof SomeClass)
((SomeClass)anotherParameter).getId(); //This looks bad.

是否可以将其动态转换为运行时的 anotherParameter?

最佳答案

你能修改派生类吗?如果是这样,您可以为此定义一个接口(interface)(语法可能有误):

public interface WithId {    void getId();}...public class MyDerivedClass1 extends AnotherClass implements WithId {...}...public class MyDerivedClass2 extends AnotherClass implements WithId {...}

然后,在你的方法中做:

...if (anotherParameter instanceof WithId) { WithId withId = (WithId) anotherParameter; withId.getId();}...

如果您可以更改方法的签名,也许您可​​以指定一个 intersection type :

public static <T extends MyClass, X extends AnotherClass & WithId> List<T> myMethod(Class<T> aParameter, X anotherParameter)

然后你会得到 getId()可直接在您的方法中使用。

关于Java泛型方法在运行时转换为参数类型,这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3719268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com