gpt4 book ai didi

java - 匿名内部类中的变量名可以与类外的参数相同。为什么?

转载 作者:行者123 更新时间:2023-11-29 06:32:25 25 4
gpt4 key购买 nike

我调用方法 doWork 并向它传递一个名为 myString 的参数。在匿名内部 AsyncTask 类中,方法 onPostExecute 定义了另一个具有相同名称的字符串,myString,作为传递给 doWork 的参数。

// Note the parameter variable name (i.e. myString)
private void doWork(final String myString) {
AsyncTask<Void, Void, Void> asyncTask = new AsyncTask<Void, Void, String>() {
@Override
protected void onPostExecute() {
// Why is this declaration allowed?
String myString = "myString";
}
}.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
}

为什么 Java 允许这样做?通常,如果您定义一个名称已存在于相同范围内的变量,Java 会报错。内部发生了什么让编译器接受这个?

最佳答案

您在 onPostExecute 中定义的变量 myString 是方法级局部变量。所以它的作用域就在 onPostExecute 方法内部,而不是外部。

因此它不会与您之前在 onPostExecute 方法之外定义的变量发生冲突/干扰。

这是一个非常简单的解释。

编辑:进一步解释

让我们举个例子,它可能会帮助您消除疑虑。

class MyClass{
public String myString = "class level string";

public void test(String testString){
String myString = "method level string";
// you have shadowed the class level variable by defining a method-level local variable.

System.out.println(myString); // will print "method level string"
}
}

关于java - 匿名内部类中的变量名可以与类外的参数相同。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29887647/

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