当前位置: 首页 > 知识库问答 >
问题:

继承变量上的@ConfigurationProperties

卫嘉泽
2023-03-14

我有一个超类看起来像这样

public class MyProvider {
    private Integer id;
    private ProviderAccount account;
}

扩展类

@Component
@ConfigurationProperties(prefix = "provider.custom")
public class CustomProvider extends MyProvider {
//this should have CustomProviderAccount
}

提供程序的配置。自定义

provider.custom.account.index=1
provider.custom.account.enabled=false
provider.custom.account.description=New Live

科目类

public class ProviderAccount {
    private Integer index;
}

public class CustomProviderAccount extends ProviderAccount {
    private boolean enabled;
    private String description;
}

尝试将CustomProvider.getAccount()ProviderAccount强制转换为CustomProviderAccount时,出现无法强制转换的异常。

原因:java.lang.ClassCastException:com.example.bean.hrs.ProviderAccount无法强制转换为com.triphop.bean.hrs.CustomProviderAccount(位于com.triphop.service.hrsServiceImpl.test(HrsServiceImpl.java:205)(位于sun.reflect.nativeMethodAccessorImpl.Invoke0(本机方法)(位于sun.reflect.nativeMethodAccessorImpl.java:62)(位于

我知道在Spring怎样才能做到这一点吗?

共有1个答案

盛浩阔
2023-03-14

@configurationproperties批注不是@inherited。您需要在您的子类上定义它来实现您想要做的事情。

https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/context/properties/configurationproperties.html

https://docs.oracle.com/javase/7/docs/api/java/lang/annotation/inherited.html

您可以为值创建一个泛型包装,并为每种提供程序类型创建一个映射,而不是使用扩展。

 类似资料:
  • 问题内容: 我正在用Java 构建一个类。逻辑本身可以工作并找到期望的解决方案(带有任意数量的参数)。无论如何,部分项目如我所料。 问题来自解决方案表示的问题。可以公平地说,我已经用Python完成了这个项目,并决定尝试使用Java作为一种介绍,这可能是问题所在,我也想像Python一样这样做。 这是我的一些课程: 问题是它仍然从Operation类获取令牌:“ null” 我知道这可能是因为op

  • 如果继承了方法,并且它需要一些私有变量,那么这也必须在中提供,因为我现在正在中调用? 编辑:对于那些说将调用父类方法的人,我发现只有创建的对象,而没有单独的对象一个用于子类,一个用于父类。这里

  • 问题内容: 我正在学习Java。我对继承有疑问。当子类扩展父类并且父类具有引用在父类中声明的实例变量的方法时。但是子类dint覆盖了此方法,并声明了与父类同名的实例变量。在这种情况下,将引用来自child的实例变量或将引用parent的实例变量。下面是代码片段 我得到的输出是 在孩子 10的父母中 有人可以让我理解为什么它引用父类的实例变量而不是子类的实例变量。 另一个疑问是,当父类和子类中有静态

  • 问题内容: 我想要以下设置: 这在Java中可能吗?怎么样?如果可以避免的话,我宁愿不使用实例变量/方法。 谢谢! 编辑: 常量是数据库表的名称。每个子对象都是一个微型ORM。 问题答案: 您无法完全按照自己的意愿去做。也许可以接受的折衷方案是:

  • 问题内容: 为什么超类的实例变量在继承中不被覆盖? 问题答案: 因为继承旨在修改行为。行为是通过方法公开的,这就是为什么可以覆盖它们的原因。 字段不是行为而是状态。您不需要修改它,也不需要修改超类使用的私有方法。它们旨在让超类完成其工作。

  • 问题内容: 我已经读过1000多个位置,这些位置不继承静态变量。但是,这段代码如何正常工作? Parent.java Child.java 此代码显示“父母”。 还阅读了一些隐藏数据的概念。 Parent.java Child.java 现在输出为“ Child”。 那么这是否意味着 静态变量被继承,但是它们遵循数据隐藏的概念 ? 问题答案: 请查看oracle的文档:http : //docs.