【问题标题】:method defined in class inaccessible类不可访问中定义的方法
【发布时间】:2020-05-06 22:55:31
【问题描述】:

我在关注这个例子: https://www.boraji.com/spring-boot-configurationproperties-example 要制作 Java Spring 属性的嵌套列表,经过混淆和简化后,如下所示:

conf.property

a.b.c=item1,item2,item3

AppProperties.java(位于包 x.y.z.properties 中):

@EnableConfigurationProperties
@ConfigurationProperties(prefix = "a")
@Configuration
public class AppProperties {
    private String version;
    private String email;
    public BProperties b = new BProperties();



    static class BProperties {
        public List<String> c;

        public List getC() {
            return c;
        }

        public void setC(List c) {
            this.c= c;
        }
    }
}

FieldValidator.java(位于包 x.y.z.validation 中):

public class IsItemValidator implements ConstraintValidator<IsItem, Object> {

    @Autowired
    public AppProperties appProperties;
    //... bunch of other stuff...

    private boolean hasValidItem(final Object item) {


        return appProperties.getB().getC().contains(item);
    }
}

为简单起见,我并没有编写所有的 getter/setter,它们都在那里,并且公开了所有内容。

我仍然得到:

java: a.b.c.properties.BProperties 中的 getC() 定义在一个 无法访问的类或接口

我尝试在谷歌上搜索并查看类似的问题,但没有一个答案对我来说有意义.. 这里发生了什么?根据我阅读的有关不同软件包的答案之一,我已经公开了所有内容..

【问题讨论】:

  • **public** static class BProperties.

标签: java oop public access-specifier


【解决方案1】:

将您的 BProperties 类声明为公开的:

public static class BProperties {

在您的代码中,它具有包私有可见性,因此 IsItemValidator 类看不到它,因为它位于另一个包中。

【讨论】:

  • 谢谢!我一定错过了,因为该类是由 IDEA 自动生成的,具有默认可见性..
猜你喜欢
  • 1970-01-01
  • 2015-07-28
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
  • 1970-01-01
  • 2017-06-11
  • 1970-01-01
相关资源
最近更新 更多