Java SwingWorker方法签名中final变量的使用 我有一个使用SwingWorker的方法。部分代码如下所示: 公共类mySocket{ 公共无效写包(最终字符串包){ //在执行器的单个线程上调度执行(因此只有一个线程) //后台操作可以立即进行) // executor.execute(新SwingWorker(){ @凌驾 受保护的字符串doInBackground()引发异常{ //在后台线程上调用 System.out.println(“写出此数据包->”+数据包+”

Java SwingWorker方法签名中final变量的使用 我有一个使用SwingWorker的方法。部分代码如下所示: 公共类mySocket{ 公共无效写包(最终字符串包){ //在执行器的单个线程上调度执行(因此只有一个线程) //后台操作可以立即进行) // executor.execute(新SwingWorker(){ @凌驾 受保护的字符串doInBackground()引发异常{ //在后台线程上调用 System.out.println(“写出此数据包->”+数据包+”,java,scope,final,swingworker,Java,Scope,Final,Swingworker,1.Final对我来说意味着变量只能被赋值一次。但是由于声明是方法签名的一部分,我不知道这在上下文中意味着什么。 这只意味着不能将新值重新分配给变量数据包 2.我总是假设在实例化类时为final变量赋值,但在这里它是在调用方法时赋值的。传递给方法的变量是否也需要声明为final并在类的构造函数中赋值才能起作用? 您也可以使用局部最终变量。同样的规则也适用,但它们与构造函数/此引用无关 3.我是否可以使用不同的数据包值多次调用该方法,或者因为变量被声明为final,这是否意味着如果我想使用不同的值

1.Final对我来说意味着变量只能被赋值一次。但是由于声明是方法签名的一部分,我不知道这在上下文中意味着什么。

这只意味着不能将新值重新分配给变量
数据包

2.我总是假设在实例化类时为final变量赋值,但在这里它是在调用方法时赋值的。传递给方法的变量是否也需要声明为final并在类的构造函数中赋值才能起作用?

您也可以使用局部最终变量。同样的规则也适用,但它们与构造函数/
引用无关

3.我是否可以使用不同的数据包值多次调用该方法,或者因为变量被声明为final,这是否意味着如果我想使用不同的值调用该方法,我需要为变量数据包的每个新值重新实例化该类?

您可以使用不同的值多次调用该方法。
packet
变量类似于局部变量。不,您不需要为每个值/调用重新实例化类

进一步阅读:


内部类只能引用最终变量,因为所需的变量实际上是作为参数传递给内部类的。如果变量不是最终变量,并且在创建内部类后更改了,则它将不再保留当前变量,而是保留以前的变量。为了避免这种奇怪现象,并保持不变例如,变量/参数必须是最终的,内部类才能读取

Final对我来说意味着变量只能被赋值 一次。但是因为声明是 方法,我不知道这在上下文中是什么意思

这意味着同样的事情,你不能重新分配变量

I have a method that uses a SwingWorker.   Part of the code is shown below:

   public class mySocket {

   public void writePacket(final String packet) {
    // schedules execution on the single thread of the executor (so only one
    // background operation can happen at once)
    //
    executor.execute(new SwingWorker<String, Void>() {

        @Override
        protected String doInBackground() throws Exception {
            // called on a background thread
            System.out.println("writing out this packet->" + packet + " 
                            <-");
            out.println(packet);
            String thePacket = readPacket();
            return thePacket;
        }

                ..................
我总是假设最终变量在 该类已实例化,但在这里它是在调用该方法时分配的

不,局部变量也可以是最终变量,也可以是参数。它们在每个范围(块或方法级别)分配一次

传递给方法的变量是否也需要 声明为final,并在类的构造函数中分配给 工作

不,那完全无关

我可以使用不同的数据包值多次调用该方法吗 或者因为变量被声明为final,这是否意味着如果 要使用不同的值调用该方法,我需要重新实例化 变量包的每个新值的类

不,请参见上文。它是每个方法调用的新变量

Final对我来说意味着变量只能被赋值一次。但是因为声明是方法签名的一部分,我不知道这在这里意味着什么

同样,这意味着您不能将新值重新分配给包含参数的局部变量(这被认为是错误的做法)

我总是假设在实例化类时为最终变量赋值,但这里是在调用方法时赋值

第一部分适用于最终实例变量,而不是局部变量

但想法是一样的:它们需要被赋予一个值,并且只能发生一次

我是否可以使用不同的数据包值多次调用该方法,或者因为变量被声明为final,这是否意味着如果我想使用不同的值调用该方法,我需要为变量数据包的每个新值重新实例化该类

您可以多次调用它。声明为final的参数对方法的代码调用没有影响(仅用于实现)。

请阅读,…以避免SwingWorker&Future丢失错误,尤其是@trashgod发布的帖子
// this compiles
public void foo(String bar){
   bar = "xyz";
}

// this doesn't
public void foo(final String bar){
   bar = "xyz";
}