【问题标题】:Using the final modifier with mutator methods将 final 修饰符与 mutator 方法一起使用
【发布时间】:2013-06-01 22:38:10
【问题描述】:

在 C++ 中你可以写

Int getX() const { return x; }

在Java中是否有使用final的等效方法结构?

如何将 const/ final 修改后的参数传递给方法?

喜欢这个 C++ 代码

void printX(const int x); 

【问题讨论】:

  • 如果你告诉Java程序员这是做什么的,这将有助于他们回答。
  • @tieTYT 它告诉我们调用这个方法时类状态没有被修改。
  • 所以如果将对象的引用作为const参数传递,则可以调用该方法。

标签: java c++ mutators


【解决方案1】:

对于 C++ 示例:

void printX(const int x);

你可以在方法参数中使用final修饰符来表示方法内部不能修改参数:

void printX(final int x) {
    System.out.println(x);
    x++; //compiler error since `x` is marked as final
}

注意,对对象引用变量使用final修饰符只是意味着引用不能被修改,但其内部内容仍然可以:

class Foo {
    int x = 0;
}
class Bar {
    changeFoo(final Foo foo) {
        foo.x = foo.x + 1; //allowed even if `foo` is marked as final
        foo = new Foo(); //compiler error...
    }
}

来自 SJuan76 对此代码的评论

Int getX() const { return x; }

它告诉当这个方法被调用时,类状态没有被修改。

Java 中没有办法标记这样的方法。

【讨论】:

  • 如果你通过final List<Integer> ints - 不能修改?
  • 这相当于printx (const int x) {...,而不是OP所要求的。
  • @dantuch ints 不能修改即ints = new ArrayList<Integer>();,但其内容可以。
  • @SJuan76 OP 的问题一开始就很模棱两可。
  • @Luiggi Mendoza 当你说parameter can't be modified inside the method 时,它只适用于不可变对象(以及不可变的特权),因为唯一不能改变的是对传递参数的引用——它的内部状态可以改变如果可能的话。
猜你喜欢
  • 2014-10-09
  • 2015-08-13
  • 2015-04-29
  • 1970-01-01
  • 2011-11-11
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
相关资源
最近更新 更多