首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将java方法参数设置为final

将java方法参数设置为final
EN

Stack Overflow用户
提问于 2010-11-12 15:38:40
回答 7查看 63.7K关注 0票数 103

final在下面的代码之间有什么不同。将参数声明为final有什么好处吗?

public String changeTimezone( Timestamp stamp, Timezone fTz, Timezone toTz){  
    return ....
}

public String changeTimezone(final Timestamp stamp, final Timezone fTz, 
        final Timezone toTz){
    return ....
}
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-11-12 16:13:54

由于形式化方法参数是局部变量,因此只有当它们被声明为final时,才能从内部匿名类访问它们。

这使您不必在方法体中声明另一个局部final变量:

 void m(final int param) {
        new Thread(new Runnable() {
            public void run() {
                System.err.println(param);
            }
        }).start();
    }
票数 140
EN

Stack Overflow用户

发布于 2010-11-12 15:45:18

final可以防止您为变量赋值,这对捕获输入错误很有帮助。在样式上,您可能希望保持接收到的参数不变,并仅将其分配给局部变量,因此最终将有助于强制执行该样式。

必须承认,我很少记得使用final作为参数,也许我应该这样做。

public int example(final int basicRate){
    int discountRate;

    discountRate = basicRate - 10;
    // ... lots of code here 
    if ( isGoldCustomer ) {
        basicRate--;  // typo, we intended to say discountRate--, final catches this
    }
    // ... more code here

    return discountRate;
}
票数 32
EN

Stack Overflow用户

发布于 2010-11-12 15:43:51

这并没有太大的不同。这只意味着你不能写:

stamp = null;
fTz = new ...;

但是你仍然可以这样写:

stamp.setXXX(...);
fTz.setXXX(...);

这主要是对跟随您的维护程序员的一个提示,您不会在方法中间的某个地方为参数赋一个新值,因为它不明显,因此可能会导致混淆。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4162531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档