首页 > 解决方案 > 如何在java中设置公共静态最终类实例的值

问题描述

例子

public static final class MyClass{
        private long id_;
        public static final int MEMBER_ID_FIELD_NUMBER = 2;
        private long startDate_;
    ....

    }

//meanwhile in another class
class Abc {
        ...
    public final void aFunc {
        MyClass aaa = ???? // here is what I want to know how to set the class values
    ....
    }

}

如何MyClass在其他类中设置值?我试着做“初始化”

MyClass aaa = {
                id_: 123123132,...
            };

它只是给我 id_ `无法解析符号的错误。

我来自javascript背景,这就是我这样想的原因。知道如何使用 a 的部分/所有自定义默认值启动实例public static final class吗?顺便说一句,如果背景故事可以帮助全面了解 --- 我这样做是为了测试特定类的方法,其中包括MyClass. 这是一种模拟值的尝试,而不必重新创建整个 ActionBean 来测试一个方法。

标签: javaclassstaticfinal

解决方案


您有两个选项可以用值填充字段。一种选择是使用公共构造函数传递您要更新的所有参数:

public static final class MyClass{
    private long id_;
    public static final int MEMBER_ID_FIELD_NUMBER = 2;
    private long startDate_;

    public MyClass(long id_, long startDate_) {
        this.id_ = id_;
        this.startDate_ = startDate_;
    }
}

你可以像下面这样使用它:

public final void aFunc {
    MyClass objectA = new MyClass(1L, 23214112213L);
}

第二种选择是使用 setters: 每个字段的方法来添加值:

public static final class MyClass{
    private long id_;
    public static final int MEMBER_ID_FIELD_NUMBER = 2;
    private long startDate_;
    
    public void setID(long id_) {
         this.id_ = id_;
    }

    public void setStartDate(long startDate_) {
         this.startDate_ = startDate_;
    }
        
}

您可以按如下方式使用它们:

public final void aFunc {
    MyClass objectB = new MyClass();
    objectB.setID(1L);
    objectB.setStartDate(23214112213L);
}

但是你可以将它们结合起来。您可以拥有构造函数并使用setter。

查看java 构造函数并查看setter 和 getter

  • 对于您的私人领域,我假设您也需要吸气剂。

这些是您应该具备的基本知识的一部分。另外请记住,还有一些约定(命名等)


推荐阅读