由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请教一个Java编程问题
相关主题
Java的多线程的一般问题高人点拨一下gc怎么call这个object.finalize()
还请教一个关于C++的问题请教一个design的问题
[合集] 基类函数已经是virtual了,为啥子类还要virtual啊?A C++ inheritance question!
问题一枚关于Java一个小程序的结果
模板类中的一个类型问题?很多有多年经验的Java程序员都会弄错的题目
Question about type conversion (转载)请教java中compareTo的方法
Re: java inner class - 初学者问 (转载)几个C++书写风格疑问
重新学习Java Thread的Field变量与Thread LocalHow does YAHOO calculate RSI? (转载)
相关话题的讨论汇总
话题: final话题: runnable话题: java话题: int话题: anonymous
进入Programming版参与讨论
1 (共1页)
r******l
发帖数: 10760
1
Java里面的anonymous class只能使用final的变量。如果我需要使用普通变量,下面两
个做法那个好呢?
1. 定义一个新的final变量
int abc;
public void TestMethod() {
final int finalAbc = abc;
xxx.queueEvent(new Runnable() {
@Override
public void run() {
finalAbc.foo();
finalAbc.bar();
}
});
}
2. 定义一个新的Runnable的子类,这样就可以直接用非final的变量了
int abc;
class myRunnable implements Runnable {
@Override
public void run() {
abc.foo();
abc.bar();
}
}
public void TestMethod() {
final int finalAbc = abc;
xxx.queueEvent(new myRunnable());
}
g*****g
发帖数: 34805
2
不如 wrap进一个方法,在方法里用 final. 代码干净。

【在 r******l 的大作中提到】
: Java里面的anonymous class只能使用final的变量。如果我需要使用普通变量,下面两
: 个做法那个好呢?
: 1. 定义一个新的final变量
: int abc;
: public void TestMethod() {
: final int finalAbc = abc;
: xxx.queueEvent(new Runnable() {
: @Override
: public void run() {
: finalAbc.foo();

r******l
发帖数: 10760
3
啥意思啊?我不怎么会Java,能否给个例子?多谢!

【在 g*****g 的大作中提到】
: 不如 wrap进一个方法,在方法里用 final. 代码干净。
w**z
发帖数: 8232
4
不熟Java, 就远离anonymous inner class

【在 r******l 的大作中提到】
: 啥意思啊?我不怎么会Java,能否给个例子?多谢!
k**********g
发帖数: 989
5

让我介绍一下为什么有这奇怪的final规定。
https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html#
accessing
这个anonymous class,如果它用到了任何local variable,这local variable是会被
anonymous class 捕获(capture)。这捕获的意思是:(1)anonymous class会有一
个同名的field,这很容易理解,(2)the enclosing scope (正在尝试创建这个
anonymous class 的函数)如引用这个local variable name,其实它是直接在引用
anonymous class里的field,因此这个variable已经不再是local variable。它的
lifetime 就是这个anonymous class 的lifetime 。
correct me if wrong

【在 r******l 的大作中提到】
: 啥意思啊?我不怎么会Java,能否给个例子?多谢!
r******l
发帖数: 10760
6
我这不是来学习吗?谁一生下来就熟Java啊?

【在 w**z 的大作中提到】
: 不熟Java, 就远离anonymous inner class
c*********e
发帖数: 16335
7
下面这个连接的第一个大的答案makes sense.
http://stackoverflow.com/questions/4732544/why-are-only-final-v

【在 k**********g 的大作中提到】
:
: 让我介绍一下为什么有这奇怪的final规定。
: https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html#
: accessing
: 这个anonymous class,如果它用到了任何local variable,这local variable是会被
: anonymous class 捕获(capture)。这捕获的意思是:(1)anonymous class会有一
: 个同名的field,这很容易理解,(2)the enclosing scope (正在尝试创建这个
: anonymous class 的函数)如引用这个local variable name,其实它是直接在引用
: anonymous class里的field,因此这个variable已经不再是local variable。它的
: lifetime 就是这个anonymous class 的lifetime 。

c*********e
发帖数: 16335
8
用final 其实还是可以改数据啊。比如
final int[] res = new int[1];
Runnable r = new Runnable() { public void run() { res[0] = 123; } };
r.run();
System.out.println(res[0]);
http://stackoverflow.com/questions/4732544/why-are-only-final-v

【在 g*****g 的大作中提到】
: 不如 wrap进一个方法,在方法里用 final. 代码干净。
c*********e
发帖数: 16335
9
int后面有个foo() method?
Integer后面可以跟一个foo() method吧?

【在 r******l 的大作中提到】
: Java里面的anonymous class只能使用final的变量。如果我需要使用普通变量,下面两
: 个做法那个好呢?
: 1. 定义一个新的final变量
: int abc;
: public void TestMethod() {
: final int finalAbc = abc;
: xxx.queueEvent(new Runnable() {
: @Override
: public void run() {
: finalAbc.foo();

r******l
发帖数: 10760
10
嗯,例子举的不好,把int改成mytype吧。反正就是这么个意思,呵呵。

【在 c*********e 的大作中提到】
: int后面有个foo() method?
: Integer后面可以跟一个foo() method吧?

a*******a
发帖数: 1240
11
final的意思是,因为在 anonymous class里,要避免出现 undeterministic的问题。
1 (共1页)
进入Programming版参与讨论
相关主题
How does YAHOO calculate RSI? (转载)模板类中的一个类型问题?
请教template和factory有啥区别?Question about type conversion (转载)
map是用什么data structure来implement的?Re: java inner class - 初学者问 (转载)
再来讨论一直算法课的作业吧重新学习Java Thread的Field变量与Thread Local
Java的多线程的一般问题高人点拨一下gc怎么call这个object.finalize()
还请教一个关于C++的问题请教一个design的问题
[合集] 基类函数已经是virtual了,为啥子类还要virtual啊?A C++ inheritance question!
问题一枚关于Java一个小程序的结果
相关话题的讨论汇总
话题: final话题: runnable话题: java话题: int话题: anonymous