函数传参中的 final

supergerm 2005-04-03 01:08:18
假设:
KK 是一个对象的引用,a、b 都是 KK 的数据成员,将KK以参数形式传递给一个函数。
问题:
如何做,才能防止 a、b 在函数中被修改?
...全文
229 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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
  • 打赏
  • 举报
回复
你的标题已经给出了答案啊

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧