动态转换为Java中的泛型类型

Pet*_*ter 2 java

这是我放在一起的一个小例子:

private static <T> T getValue(T defaultValue) {
    if (defaultValue instanceof Boolean) {
        return (T) true;
    }
    return defaultValue;
}
Run Code Online (Sandbox Code Playgroud)

基本上,如果T是布尔类型,我希望返回"true".但是,我得到一个编译错误,布尔值不能强制转换为T.

我该怎么做?

还有,有办法检查T是否是boolean类型?问候.

jak*_*etr 5

true 是一种原始类型,您希望返回一个对象。您应该将 true 包装在一个对象中。

这有效:

private static <T> T getValue(T defaultValue) {
    if (defaultValue instanceof Boolean) {
        return (T)Boolean.valueOf(true);
    }
    return defaultValue;
}
Run Code Online (Sandbox Code Playgroud)


EJK*_*EJK 5

更改

        return (T) true;
Run Code Online (Sandbox Code Playgroud)

        return (T) Boolean.TRUE;
Run Code Online (Sandbox Code Playgroud)

这将作为Boolean.True工作,类是Boolean的实例.值"true"是基本类型boolean.