你可以在不分配给另一个对象的情况下进行投射吗?

时间:2016-01-08 05:29:18

标签: java reflection casting

在java中,可以在不必将对象分配给另一个对象的情况下转换对象。例如:

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

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

因为当您分配例如:Date a = (Date)x时,a和x最终成为引用,两者都能够触及Date方法。但为了使我的代码更清晰,有没有一种方法可以在不必分配的情况下进行投射?

2 个答案:

答案 0 :(得分:8)

这样做是有效的:

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

答案 1 :(得分:2)

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

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

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

请参阅Jason关于如何正确执行此操作的答案。

相关问题