【问题标题】:Access object created in innerClass from elsewhere java从其他地方java访问在innerClass中创建的对象
【发布时间】:2016-03-11 12:41:56
【问题描述】:

所以我有outerClass和innerClass,我想使用outerClass访问从innerClass创建的对象,例如:

public Class outerClass{
    Class innerClass{
        //properties
    }
}

所以我想做的是这样的:

public class Main {
    public static void main(String [] args) {
        outerClass outerObj = new outerClass();
        outerClass.innerClass innerObj = outerObj.new innerClass();

        //this is what i want:
        outerObj.innerObj;
    }
}

这可能很复杂,但我想做的是只使用外部对象来获取内部对象

【问题讨论】:

  • 那么问题出在哪里?
  • 评论下方的行不起作用
  • 在你的outerClass中创建innerObj。

标签: java object inner-classes outer-classes


【解决方案1】:

这可行:

public class outerClass{
    public static class innerClass{
        //properties
    }
}

【讨论】:

  • 我认为这是一个有效的答案
【解决方案2】:
public Class outerClass{
    Class innerClass{
        //properties
    }

    public innerClass innerObj;
}

outerObj.innerObj = outerClass.new innerClass();

【讨论】:

  • 是的,这就是我想出的解决方案,但有没有更简单的方法?
  • @nikagar4 更容易是什么意思?
  • 能够执行outerObj.innerObj没有别的办法
  • 如果没有名为“innerObj”的额外属性,有没有办法做到这一点?
  • @nikagar4 那么你不应该说and i want to access the object created from innerClass using outerClass。创建一个单独的类。
【解决方案3】:
outerClass.innerClass innerObj = outerObj.new innerClass();

innerObj 是一个局部变量。可以直接引用为

innerObj

【讨论】:

  • 我想从另一个类访问它
  • 那么你需要将它传递给另一个类。它只是一个普通的旧局部变量。 outerObj 不保留对innerObj 的引用(但innerObj 确实保留对outerObj 的引用)。
  • 是的,我理解,但我希望能够仅使用 outerClass 访问它
  • @nikagar4 那你不明白。您不能仅使用outerClass 访问它,因为outerClass(或outerObj)不保留对innerObj 的引用,除非您实际上将实例的引用添加到外部类,就像Nadir 建议的那样。
【解决方案4】:

对于非静态内部类,编译器会自动添加对“所有者”对象实例的隐藏引用。当您尝试从静态方法(例如 main 方法)创建它时,没有拥有实例。这就像试图从静态方法调用实例方法一样 - 编译器不允许这样做,因为您实际上没有要调用的实例。

因此内部类本身必须是静态的(在这种情况下不需要拥有实例),或者您只能从非静态上下文中创建内部类实例。

所以让你的 innerClass static

public static class innerClass{
        //properties
    }

你可以打电话

outerClass.innerClass innerObj = new outerClass.innerClass();

如果您只想通过点 (.) 符号访问字段,应考虑使用

outerClass 中的静态内部字段,例如 System 类中的 PrintStream

例子:

public class outerClass{
    public static innerClass innerObject = new innerClass();
    static  class  innerClass{
            //properties
        }
    }

然后在main方法中

outerClass outerClass= new outerClass();
        outerClass.innerObject.yourfied

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多