gpt4 book ai didi

java - 在内部类中使用非最终变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:50:46 25 4
gpt4 key购买 nike

我是 Java 的新手,几天以来一直在做一些基本的编码。今天在处理变量和内部类时,我在内部类中使用非最终变量时卡住了。

我在工作中使用 testNG 框架,所以这是我正在尝试的场景,

=========

public class Dummy extends TestNG {
@Override
public void setUp() throws Exception {
log.error("Setup Goes here");
}

@Override
public void test() throws Exception {
String someString = null;
try {
someString = "This is some string";
} catch (Exception e) {
log.error(e.getMessage());
}
Thread executeCommand = new Thread(new Runnable() {
@Override
public void run() {
try {
runComeCommand(someString, false); <=====ERROR LINE
} catch (Exception e) {
log.error(e.getMessage());
}
}
});
}

@Override
public void cleanUp() throws Exception {
}
}

==========

当我写上面的代码时,它抛出了一个错误“不能引用内部类中的非最终变量”。所以我实现了 eclips 提供的建议之一,即在父类中声明 someString 变量。现在代码看起来像这样,

==========

public class Dummy extends TestNG {
String someString = null; <=====Moved this variable from test() to here
@Override
public void setUp() throws Exception {
log.error("Setup Goes here");
}
@Override
public void test() throws Exception {
<same code goes here>
}

@Override
public void cleanUp() throws Exception {
}
}

==========

现在在 eclips 中不显示任何错误。我想知道,为什么它现在接受内部类中的变量,即使它不是最终的。它不应该因同样的错误而失败吗?现在可以了吗?任何帮助都会很棒。

最佳答案

在您的第一个示例中,someStringtest 中的局部变量。您不能引用非 final 局部变量,因为内部类将无法观察到该值的变化。通过将该变量声明为 final,在内部类中保留了一个额外的引用(并且该变量的值在创建实例时已知)。

在第二个示例中,someString不是局部变量,而是一个实例。内部类可以从容器对象中引用该变量。

关于java - 在内部类中使用非最终变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15479503/

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