java - 确保字段从构造函数中初始化

标签 java

编辑:很抱歉我之前的问题,final 关键字会让您感到困惑,这是不合适的。也为我糟糕的英语感到抱歉。

-----问题------

假设我有一个没有任何构造函数的模型类,因为我需要在许多不同的逻辑中对其进行初始化。 但是我有一个notnull关键字。

public class Model {
    public notnull String name;
    public notnull String address;
    public notnull int age;
}

我需要在不同的地方使用它,但要不断检查是否所有 notnull 字段都在编译时初始化

Model m = new Model();
m.name = "Hello";
m.age = 15;
// syntax error, you should set Model.address

或者

Model m1 = new Model();
m1.address = "World";
m1.age = 20;
// syntax error, you should set Model.name

我如何在 Java 中实现它? 谢谢。

最佳答案

assume I have a model class without any constractor

这是不可能的。每个类都有一个构造函数。如果你不定义一个,你最终会得到默认的构造函数。在你的情况下:

public Model() {
    super();
}

checking if all final field were initialized

首先final字段必须要初始化,否则编译器编译不通过。因此,您必须必须初始化 final 字段:

  • 在构造函数中
  • 声明final字段时

构造函数初始化

public final String name;
public final int age;

public Model() {
    this.name = "Hello";
    this.age = 13;
}

声明初始化

public final String name = "Hello";
public final int age = 13;

public Model() {
    super();
}

关于java - 确保字段从构造函数中初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43751984/

相关文章:

java - 无法使用vertx创建文件

java - com.microsoft.sqlserver.jdbc.SQLServerConnection 和 java.sql.Connection 之间有什么区别

java - 如何排除字段被复制

Java 32 位,带 PAE 内核 + SO 32 位和 CPF 64 位

java - 在哪里放置 hibernate 注释?

java - 在 CriteriaQuery 期间初始化 JPA 实体的 transient 属性

java - 用于 EC2 实例中 session 管理的 Memcached session 管理器

java - 无法为 Jenkins 中的对象堆错误保留足够的空间

java - 使用 Spring Boot 在 Activiti 中为 JUnit 测试构建 ApplicationContext 时出现异常

java - 有效地搜索二维矩阵的多个项目