gpt4 book ai didi

Java变量必须在它自己的范围内初始化?

转载 作者:搜寻专家 更新时间:2023-11-01 02:50:47 24 4
gpt4 key购买 nike

我有一些代码,其中有一个变量需要冗长的类声明。我想在页面顶部定义变量,然后像这样稍后定义它:

private IFoo bar;
/* seemingly irrelevant code */
bar = new IFoo() { /* a bunch of stuff */ };

但是我的 Java 编译器提示说这不可能发生。它说之前行中的 } 存在语法错误(这真的没有意义,因为它在正确的位置)。

为了让编译器安静下来,我将变量的定义放在 more { } 中.我忘记了这种模式的名称,但我知道它存在的原因,而且在我的情况下应该不是必需的。

{
bar = new IFoo() { /* a bunch of stuff */ };
}

无论如何,我想我的问题是,为什么我不能这样做bar = new IFoo(){}; { bar = new IFoo(){}; ?

其他细节:IFoo 是一个接口(interface),我在 Android 和 Eclipse 上使用 JDK 1.6。

立即定义 bar 就可以了:

private IFoo bar = new IFoo() { /* stuff */ };

最佳答案

它不起作用的原因是 Java 不允许独立代码。您必须将代码放在方法、构造函数或初始化程序中。

这是一个初始化器:

private IFoo bar = new IFoo() { /* a bunch of stuff */ };

这是一个声明,后面是一个赋值:

private IFoo bar;
/* seemingly irrelevant code */
bar = new IFoo() { /* a bunch of stuff */ };

如果您的 bar 是局部变量(那么您需要删除 private),您可以在函数中执行此类操作。但是在类声明中是不允许的。

在赋值周围添加大括号使您的代码成为构造函数的一部分,再次允许赋值。这就是以下作业起作用的原因:

{
bar = new IFoo() { /* a bunch of stuff */ };
}

关于Java变量必须在它自己的范围内初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11597418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com