函数传参中的 final
假设:
KK 是一个对象的引用,a、b 都是 KK 的数据成员,将KK以参数形式传递给一个函数。
问题:
如何做,才能防止 a、b 在函数中被修改?
问题点数:20、回复次数:15Top
1 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-03 13:13:40 得分 0
你的标题已经给出了答案啊Top
2 楼F1in2003(无敌超级赛亚人)回复于 2005-04-03 13:21:32 得分 0
自问自答?Top
3 楼midthinker(呵呵)回复于 2005-04-03 13:26:08 得分 0
final能够相当不错的解决问题,但是如果可以得到a,b中真正关心的简单数据类型的话,还是建议利用简单数据类型作为参数传递。
@.@||~Top
4 楼supergerm(超级细菌)回复于 2005-04-03 13:26:42 得分 0
NO! 你们误解了。。。我知道在参数中用 final 但不知道用在哪个位置,请给个例子可以吗?Top
5 楼supergerm(超级细菌)回复于 2005-04-03 13:28:25 得分 0
To: midthinker(思索者)
你误解我的意思了。。我是要把 对象传到函数里面去, a、b 只是举个例子罢了。对于 传进的那个对象,我是不想让函数修改他所有的成员。Top
6 楼irvine007(┣━┫Rvine)回复于 2005-04-03 13:30:16 得分 10
void fun(final KK x)
~~~~~~~~~~~~~~~~~~这里的final只说明x不能赋予新的KK对象。
如果a,b是public,人家还是可以修改的。
好的方法是,你要使用private或protected保护起来。
Top
7 楼supergerm(超级细菌)回复于 2005-04-03 13:38:07 得分 0
是的,正因为 (final KK x) 这是使 KK 这个引用看成了“常量”,而不是内部的对象。我现在就是想问如何能使这个对象成为“常量”呢?
还是没有这种方法??Top
8 楼vgvg(上帝在关闭一扇窗的同时,在别处打开了一扇门。可这扇门迟迟不开,我只好破门而入!)回复于 2005-04-03 13:39:33 得分 0
class KK{
final int a=0;
final int b=0;
}
class Test{
public static void main(String[] arg){
KK k0=new KK();
method(k0);
}
static void method(KK k){
//k.a=1;
//k.b=2;
}
}
-----------------
class KK{
private int a;
private int b;
}
class Test{
public static void main(String[] arg){
KK k0=new KK();
method(k0);
}
static void method(KK k){
//k.a=1;
//k.b=2;
}
}Top
9 楼escalj(天行健,君子以自强不息)回复于 2005-04-03 13:40:12 得分 0
?!Top
10 楼supergerm(超级细菌)回复于 2005-04-03 13:52:34 得分 0
??没看懂Top
11 楼supergerm(超级细菌)回复于 2005-04-03 17:27:34 得分 0
还有没有人可以解释下了?Top
12 楼kingfish(工作很忙,很少来csdn...)回复于 2005-04-03 17:38:11 得分 0
by value
即使不用final也改不了x(x的a和b可以改)
class KK{
private int a;
private int b;
public KK(int a,int b){
this.a = a;
this.b = b;
}
}
void f(KK x){
x.setA(1);
x.setB(2); //如果不提供set方法,就不能改了
}Top
13 楼supergerm(超级细菌)回复于 2005-04-03 18:02:04 得分 0
不。。您也没理解我的意思。。。。我的意思是,在公有的情况下,就是不想让他被改。。。因为某些时候,有必要用的。Top
14 楼kingfish(工作很忙,很少来csdn...)回复于 2005-04-03 18:34:40 得分 10
那做不到
java并没有像其它语言提供readonly的支持。Top
15 楼supergerm(超级细菌)回复于 2005-04-04 11:05:45 得分 0
哦。好吧。谢谢大家。结帖了。Top




