相关疑难解决方法(0)

为什么我要在Java中的方法参数上使用关键字"final"?

我不明白其中final的关键字是真的方便的时候它是在方法的参数使用.

如果我们排除使用匿名类,可读性和意图声明,那么对我来说似乎几乎一文不值.

强制某些数据保持不变并不像看起来那么强大.

  • 如果参数是基元,那么它将没有任何效果,因为参数作为值传递给方法,并且更改它将在范围之外没有任何影响.

  • 如果我们通过引用传递参数,那么引用本身就是一个局部变量,如果从方法中更改引用,那么从方法范围外部不会产生任何影响.

考虑下面的简单测试示例.尽管该方法改变了给定的参考值,但该测试仍然通过,但它没有效果.

public void testNullify() {
    Collection<Integer> c  = new ArrayList<Integer>();      
    nullify(c);
    assertNotNull(c);       
    final Collection<Integer> c1 = c;
    assertTrue(c1.equals(c));
    change(c);
    assertTrue(c1.equals(c));
}

private void change(Collection<Integer> c) {
    c = new ArrayList<Integer>();
}

public void nullify(Collection<?> t) {
    t = null;
}
Run Code Online (Sandbox Code Playgroud)

java final pass-by-reference pass-by-value

367
推荐指数
8
解决办法
14万
查看次数

接口方法中的最终参数 - 重点是什么?

在Java中,final在接口方法中定义参数并且不遵循实现类中的参数是完全合法的,例如:

public interface Foo {
    public void foo(int bar, final int baz);
}

public class FooImpl implements Foo {

    @Override
    public void foo(final int bar, int baz) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,bar并且在类VS的接口中baz有相反的final定义.

以同样的方式,final当一个类方法扩展另一个类时,不会强制执行任何限制abstract.

虽然final在类方法体内有一些实用价值,但是有没有指定final接口方法参数的点?

java methods final interface class

185
推荐指数
4
解决办法
3万
查看次数