Java泛型和instanceof

问题描述 投票:0回答:1

想知道如何使用 Java 泛型正确进行条件转换。

我的示例中的第一个

castTo
方法似乎是最明显的,但它给了我一个编译时错误
A cannot be casted to T
,我知道这是因为 Java 类型擦除功能。

我想出了

castTo
的第二个版本,我需要通过一个课程并使用
isInstance()
,它可以工作,但看起来很难看。

有没有更好的方法?我讨厌每次都传递类参数,而第二种方法对我来说看起来不像现代的 java 21 方法。

class A {
    int value = 1;
}

class B extends A {
    A getObject() {
        return new B();
    }
    <T extends A> T castTo(A obj) {
        // Compile error: A cannot be casted to T
        if (obj instanceof T casted) {
            return casted;
        }
        return null;
    }
    <T extends A> T castTo(A obj, Class<T> targetType) {
        if (targetType.isInstance(obj)) {
            return targetType.cast(obj);
        }
        return null;
    }
}
java generics casting
1个回答
0
投票

有没有更好的办法?

不。您必须显式传递

Class
参数。

© www.soinside.com 2019 - 2024. All rights reserved.