相关疑难解决方法(0)

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

在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万
查看次数

在Java中使抽象方法参数最终

我有一个抽象类,抽象方法,我想要的参数final- 也就是说,我不想允许抽象类和方法的实现重新分配参数.

编辑:这个动机本身并不是不变性,这更多地与对象的设计有关.(事实上​​,在我的用例中,参数是将在抽象方法的实现中进行变异的集合.)相反,我想与实现我的抽象类/方法的任何人沟通,不应该重新分配这些变量.我知道我可以通过java-doc进行沟通,但我正在寻找更合同的东西 - 他们必须遵循,而不是仅仅被引导跟随.

在非抽象方法中,我可以使用final关键字来执行此操作- 例如:

public class MyClazz {
  public void doSomething(final int finalParameter){
    finalParameter++; // compile error - cannot assign a value to final variable
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我final在抽象方法中使用关键字,则这不构成合同的一部分 - 也就是说,抽象方法的实现不需要final关键字,并且可以重新分配参数:

public abstract class MyAbstractClazz {
  public abstract void doSomething(final int finalVariable);
}

public class MyExtendedClazz extends MyAbstractClazz {
  @Override
  public void doSomething(int finalVariable) { // does not require final keyword
    finalVariable++; // so the variable is modifiable
  }
} …
Run Code Online (Sandbox Code Playgroud)

java final abstract

3
推荐指数
1
解决办法
1496
查看次数

标签 统计

final ×2

java ×2

abstract ×1

class ×1

interface ×1

methods ×1