avatar
请教一个Java编程问题# Programming - 葵花宝典
q*n
1
即使最有经验的教师, 在不考试评分的情况下,也难以区分一个八十分的学生和一个
90分的学生。
而在现实中, 八九十分, 其实是很重要的区别。 一个球队进八个球, 对手进9个
球, 结果将显然。 一个国家人均寿命80岁, 另一个国家人均寿命90岁, 也是很
大的区别, 而你如果不看统计数据, 单凭旅游者的肉眼观察, 很难区分两国的这个
区别。
当然,在职场里, 工作业绩八九十分是没有区别的, 因为如果球队是个职场, 经常
发生的是, 投球命中率90%的球员年薪8万, 而投球命中率80%的球员年薪9万
, 类似情形在职场里是惯例。
我们逃跑的速度是八十, 敌人追击的速度是九十, 结果将是什么? 职场总是不断地
混淆八九十分的区别, 只有战争才能维护人类社会的秩序。
avatar
r*l
2
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());
}
avatar
q*n
3
军队如果不打仗, 不凭战功晋升, 仅仅在和平时期凭所谓的职场规则运作, 很快就
会失去战斗力, 职场规则的结果总是小人得志, 沉渣泛起, 韩信张良吕布孙悟空可
能被压得连班长都当不上,甚至被找茬子开除, 而猪八戒之类的青云直上。
avatar
g*g
4
不如 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();

avatar
r*l
5
啥意思啊?我不怎么会Java,能否给个例子?多谢!

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

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

让我介绍一下为什么有这奇怪的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,能否给个例子?多谢!
avatar
r*l
8
我这不是来学习吗?谁一生下来就熟Java啊?

【在 w**z 的大作中提到】
: 不熟Java, 就远离anonymous inner class
avatar
c*e
9
下面这个连接的第一个大的答案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 。

avatar
c*e
10
用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. 代码干净。
avatar
c*e
11
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();

avatar
r*l
12
嗯,例子举的不好,把int改成mytype吧。反正就是这么个意思,呵呵。

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

avatar
a*a
13
final的意思是,因为在 anonymous class里,要避免出现 undeterministic的问题。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。