在java中,可以在不必将对象分配给另一个对象的情况下转换对象。例如:
Object x = Class.forName(name).newInstance();
if(x instanceof Date){
(Date)x;
x.setTime(0);
}
编译器不允许我这样做,除非我将它分配给另一个Date对象,但有没有一种方法可以在不必分配给另一个对象的情况下进行转换?
因为当您分配例如:Date a = (Date)x
时,a和x最终成为引用,两者都能够触及Date方法。但为了使我的代码更清晰,有没有一种方法可以在不必分配的情况下进行投射?
答案 0 :(得分:8)
这样做是有效的:
Object x = Class.forName(name).newInstance();
if(x instanceof Date){
((Date)x).setTime(0);
}
答案 1 :(得分:2)
强制转换不会更改对象或变量的类型。它只告诉编译器将表达式立即作为转换类型处理。这只有在您对表达式执行某些操作时才有意义。
在您的代码中,您告诉编译器将表达式x
视为Date
- 请注意,只是表达式,而不是变量。
编译器可以忽略强制转换,因为它不再使用它。显然,决定将此标记为错误,因为在大多数情况下,它表示代码存在问题。
请参阅Jason关于如何正确执行此操作的答案。