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