【问题标题】:Can you cast without assignment to another object?您可以在不分配给另一个对象的情况下进行投射吗?
【发布时间】:2016-01-08 05:29:17
【问题描述】:

在java中是否可以强制转换一个对象而不必将其分配给另一个对象。例如:

Object x = Class.forName(name).newInstance();
if(x instanceof Date){
    (Date)x; 
    x.setTime(0);
}

除非我将它分配给另一个 Date 对象,否则编译器不会让我这样做,但是有没有一种方法可以在不必分配给另一个对象的情况下进行转换?

因为当您分配例如:Date a = (Date)x 时,a 和 x 最终成为引用,两者都能够触及 Date 方法。但是为了让我的代码更干净,有没有一种方法可以让我无需分配它就可以投射?

【问题讨论】:

    标签: java reflection casting


    【解决方案1】:

    这样做是有效的:

    Object x = Class.forName(name).newInstance();
    if(x instanceof Date){
        ((Date)x).setTime(0);
    }
    

    【讨论】:

      【解决方案2】:

      强制转换不会改变对象或变量的类型。它只告诉编译器将立即向右的表达式视为强制转换类型。这仅在您实际对表达式执行某些操作时才有意义。

      在您的代码中,您告诉编译器将表达式 x 视为 Date - 请注意,只是表达式,而不是变量。

      编译器可以忽略强制转换,因为它没有进一步使用。显然,决定将此标记为错误,因为在大多数情况下,它表明代码存在问题。

      请参阅 Jason 的回答,了解如何正确操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多