有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从不同对象访问对象的内部类

我有甲级、乙级和丙级

B类是A类的内部类,如下所示:

public class A {

       public class B {
            String day;
            HashMap<String, ArrayList<Date>> locationTimes;
            public B() { 
                locationTimes = new HashMap<String, ArrayList<Date>>();}
            }

      **B fieldB;**

   .....
  }

使用依赖注入(可能与问题无关),我将类A的对象注入到类C中

我现在正试图从C类的另一个对象访问B类中的字段(String day、HashMap locationTimes)。但我无法这样做

感谢您的帮助


共 (3) 个答案

  1. # 1 楼答案

    您必须创建B的实例,如:

    public class A {
    
       private B b;
    
       public B getB() {
         return b;
       }
    
       public static class B {
          String day;
          HashMap<String, ArrayList<Date>> locationTimes;
    
          public B() { 
              locationTimes = new HashMap<String, ArrayList<Date>>();
              day = "Monday"
          }
    
          public String getDay() {
            return day;
          }
      }
    }
    

    然后您可以从B访问属性,如下所示:

    public class C {
       private A a;
    
       public void doSomething() {
          a.getB().getDay();
       }
    }
    

    编辑:您需要将类B设置为privatepublic static

  2. # 2 楼答案

    我猜您没有内部类的实例?那样的话,你应该自己做

    在外部类中,可以创建内部类的新实例

    public class Outer {
       Inner myInner;
    
       public Outer(){
           myInner = new Inner();
       }
    }
    

    如果需要直接从外部访问内部类,那么可以为该实例使用getter方法

    这个答案与Dimi的不同之处在于,他将您的内部类更改为嵌套的静态类,这与原始问题不同。(此外,它是不完整的,不是使用静态嵌套类的预期方式)

  3. # 3 楼答案

    是的,你需要在某个地方有一个B的例子

    在您的情况下,容器正在创建一个类似的实例:

    public class C {
    
    @Inject
    A a;
    
     void someMethod() {
       a.doit();
       A.B b = new A.B();
       b.doitToo(); // will work
     }
    }