【问题标题】:Dynamic cast to generic type in Java在 Java 中动态转换为泛型类型
【发布时间】:2015-01-31 02:34:19
【问题描述】:

这是我整理的一个简单的例子:

private static <T> T getValue(T defaultValue) {
    if (defaultValue instanceof Boolean) {
        return (T) true;
    }
    return defaultValue;
}

本质上,如果 T 是布尔类型,我希望返回“true”。但是,我收到一个编译错误,布尔值无法转换为 T。

我该怎么做?

另外,有没有办法检查 T 是否为布尔类型?问候。

【问题讨论】:

  • 你能return (T) Boolean.TRUE 吗?

标签: java


【解决方案1】:

改变

        return (T) true;

        return (T) Boolean.TRUE;

这将作为 Boolean 工作。True 是 Boolean 类的一个实例。值“true”是原始类型 boolean。

【讨论】:

    【解决方案2】:

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

    这行得通:

    private static <T> T getValue(T defaultValue) {
        if (defaultValue instanceof Boolean) {
            return (T)Boolean.valueOf(true);
        }
        return defaultValue;
    }
    

    【讨论】:

    • 是不是因为原生布尔值没有自动装箱到它的包装类?
    • 好问题。 Boolean 被自动装箱为其他原始类型。问题是编译器不知道它应该进行自动装箱。在这里查看哪些转化被框住了:docs.oracle.com/javase/specs/jls/se7/html/jls-5.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2022-11-27
    • 1970-01-01
    相关资源
    最近更新 更多