【问题标题】:How to put inherited objects of an abstract class as object fields in a Java class如何将抽象类的继承对象作为对象字段放入 Java 类中
【发布时间】:2022-11-02 02:51:03
【问题描述】:

我正在创建一个具有以下结构的 Spring JPA 项目:

public class Pipeline {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private long id;
  private String name;
  private SourceConfig sourceConfig;
  private SinkConfig sinkConfig;
  ...
  ...
}

public abstract class SourceConfig {
  private long id;
  private String name;
}

public abstract class SinkConfig {
  private long id;
  private String name;
}

public KafkaSourceConfig extends SourceConfig {
  private String topic;
  private String messageSchema;
}

public MysqlSourceConfig extends SourceConfig {
  private String databaseName;
  private String tableName;
}

现在当客户端传递以下 JSON 时,程序如何知道要添加到 Pipeline 对象的 SourceConfig 子类?

{
    "name": "mysql_to_bq_1",
    "sourceConfig": {
        "source": "MYSQL",
        
    },
    "sinkConfig": {

    },
    "createdBy": "paul"
}

【问题讨论】:

    标签: java spring-boot oop spring-mvc spring-data-jpa


    【解决方案1】:

    这行代码是错误的,如果它是抽象的,你必须使用特定的类而不是抽象的类。

    所以而不是

     private SourceConfig sourceConfig;
    

    利用

    KafkaSourceConfig 
    

    例如。

    或者您可以像以前一样保留它,但如果您想使用子类的某些属性,则必须将其强制转换为该类类型。

    例如

    KafkaSourceConfig kafkaSourceConfig = (KafkaSourceConfig)sourceConfig
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      相关资源
      最近更新 更多