有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在Java中创建常量对象?

如何创建对常量对象的引用

final Myclass obj = new Myclass();

不起作用,它说obj(参考)不应该被重新分配,但我们仍然可以更改参考的对象

我希望确保对象本身在构建后不会发生更改


共 (6) 个答案

  1. # 1 楼答案

    是的,你好像忘了设置字体

    final MyClass obj = new Myclass();
    

    这意味着obj只能分配一次。java没有C++类的const关键字。如果MyClass未声明为final(final class MyClass{…})它仍然可以改变

  2. # 2 楼答案

    你混合了两种东西:最终的和不变的

    变量可以是final,因此初始化后不能更改它的值(或对象引用)(当然可以更改引用的对象属性)

    对象可以是不可变的(不是关键字而是属性),因此在创建后不能更改其。字符串就是一个很好的例子-不能在字符串对象内更改backing char[]

  3. # 3 楼答案

    只要让它不可变(就像String一样)。或者将其包装在另一个对象中,该对象限制对所讨论对象的变体的访问(如^{}和consorts)

  4. # 5 楼答案

    你想要的是一个Immutable Object。Java中没有任何关键字可以立即使对象不可变。您必须设计对象的逻辑,使其状态无法更改。正如BalusC所说,您可以将其包装在另一个对象中,从而限制对其变体的访问

  5. # 6 楼答案

    在Java中,不可变类通常意味着它没有“setter”,任何可以通过“getter”访问的字段也应该是不可变的。为了让数据进入类以启动,您需要有一个将值作为参数的构造函数:

    public class MyClass {
      String something;
      int somethingElse;
    
      // The class can only be modified by the constructor
      public MyClass(String something, int somethingElse) {
        this.something = something;
        this.somethingElse = somethingElse;
      }
    
      // Access "something".  Note that it is a String, which is immutable.
      public String getSomething() {
        return something;
      }
    
      // Access "somethingElse".  Note that it is an int, which is immutable.
      public int getSomethingElse() {
         return somethingElse;
      }
    }