【问题标题】:Cast a variable name to a new type permanently将变量名称永久转换为新类型
【发布时间】:2020-02-04 13:42:19
【问题描述】:

我知道这不是一个好主意,原因有很多,但如果我有类似的情况:

Dog s = new ShihTzu();
s.beCute();

   Error: line 2 - cannot find symbol - method beCute()

((ShihTzu) s).beCute();

   It's adorable!

在与Dog s 相同的范围内,我可以将变量名称s 永久重新转换为ShihTzu 类型吗?

还是完全不可能?一旦一个变量被定义为一个类型,那么,在它当前的作用域中,就没有办法改变它了吗?

【问题讨论】:

  • 你为什么要这样做?
  • 不确定这是否是您所追求的,但您可以声明另一个变量ShihTzu x = (ShihTzu) s;
  • "一旦一个变量被定义为一个类型,那么,在它的当前范围内,就没有办法改变它了?" 准确的说。
  • @Sweeper - 是的,我知道,但我有兴趣重新使用变量名。
  • @jsheeran - 我不是真的,我只是好奇编译器是否会以任何方式允许它。更多只是好奇心,而不是现实世界的使用。 :)

标签: java types casting


【解决方案1】:

不,这是不可能的。当您将变量声明为某种类型时,就无法更改。

Java 规范says

如果使用形式参数的名称在方法、构造函数或 lambda 表达式的主体中声明新变量,则会出现编译时错误,除非新变量是在由方法、构造函数或 lambda 表达式。

如果使用局部变量 v 的名称来声明 v 范围内的新变量,则会出现编译时错误,除非新变量是在声明在 v 范围内的类中声明的。

【讨论】:

    猜你喜欢
    • 2011-05-02
    • 2011-06-30
    • 1970-01-01
    • 2011-10-31
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多