函数传参中的 final

supergerm 2005-04-03 01:08:18
假设:
KK 是一个对象的引用,a、b 都是 KK 的数据成员,将KK以参数形式传递给一个函数。
问题:
如何做,才能防止 a、b 在函数中被修改?
...全文
163 点赞 收藏 15
写回复
15 条回复
supergerm 2005年04月04日
哦。好吧。谢谢大家。结帖了。
回复 点赞
kingfish 2005年04月03日
那做不到

java并没有像其它语言提供readonly的支持。
回复 点赞
supergerm 2005年04月03日
不。。您也没理解我的意思。。。。我的意思是,在公有的情况下,就是不想让他被改。。。因为某些时候,有必要用的。
回复 点赞
kingfish 2005年04月03日
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方法,就不能改了
}
回复 点赞
supergerm 2005年04月03日
还有没有人可以解释下了?
回复 点赞
supergerm 2005年04月03日
??没看懂
回复 点赞
escalj 2005年04月03日
?!
回复 点赞
vgvg 2005年04月03日

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;
}
}
回复 点赞
supergerm 2005年04月03日
是的,正因为 (final KK x) 这是使 KK 这个引用看成了“常量”,而不是内部的对象。我现在就是想问如何能使这个对象成为“常量”呢?

还是没有这种方法??
回复 点赞
Ji秋风 2005年04月03日
void fun(final KK x)
~~~~~~~~~~~~~~~~~~这里的final只说明x不能赋予新的KK对象。
如果a,b是public,人家还是可以修改的。
好的方法是,你要使用private或protected保护起来。
回复 点赞
supergerm 2005年04月03日
To: midthinker(思索者)
你误解我的意思了。。我是要把 对象传到函数里面去, a、b 只是举个例子罢了。对于 传进的那个对象,我是不想让函数修改他所有的成员。
回复 点赞
supergerm 2005年04月03日
NO! 你们误解了。。。我知道在参数中用 final 但不知道用在哪个位置,请给个例子可以吗?
回复 点赞
midthinker 2005年04月03日
final能够相当不错的解决问题,但是如果可以得到a,b中真正关心的简单数据类型的话,还是建议利用简单数据类型作为参数传递。
@.@||~
回复 点赞
F1in2003 2005年04月03日
自问自答?
回复 点赞
jFresH_MaN 2005年04月03日
你的标题已经给出了答案啊
回复 点赞
发动态
发帖子
Java SE
创建于2007-09-28

3.4w+

社区成员

30.7w+

社区内容

Java 2 Standard Edition
社区公告
暂无公告