2013-06-19 106 views
12

我的代码中有内部类。我想让公共访问它的实例,但只有外部类应该能够创建这个实例,就像在“私有”访问中一样。如果没有制作适当的小包装(或者为每个这样的内部类别创建公共接口),有没有可能?Java - 内部类构造函数 - 只允许外部类

(很抱歉,如果我的英文不好:P)

回答

23

这是可能的。声明你的内部类公共,但它的构造函数私人。这样,您只能在封闭类和本身内部创建它,而不能从外部创建它。

+1

真的外面的类可以访问内部类的私有字段吗?很高兴知道它是否有效,谢谢! –

+0

那么这个解决方案是错误的? –

+1

不,这个解决方案是正确的,外部类可以看到内部类的所有私有字段,方法和构造函数。 – WilQu

1

默认情况下,如果你想获得你需要先有外部类的内部类的实例。

A inner class是其封闭类的成员。

您无需为此做任何事情。

非静态内部类(内部类)可以访问外部类中的其他成员,即使它们被声明为private

我希望我理解你的问题的正确途径。

refer.

+0

构造应仅用于外部类(因此不能是公开的)是可用的,但它应该是可以使用该对象不在外面(所以班级不能是私人的)。 –

0

所以制作内部类private

public class Outer { 
    private class Inner {} 
     public String foo() { 
      return new Inner().toString(); 
     } 
} 

你不能合法调用私有的默认构造函数,因为它是私人

+0

当Inner是私人的,我不能使用这个外面。我可以为这个类创建特定的公共接口,但是我想避免这个解决方案,如果有更好的解决方案。 –

+0

它是你这个问题的解决方案'只有外部类应该能够创建这个实例'。你能否详细说明你的问题你真的想要什么!不清楚。 – iMBMT

+0

只有'Outer'对象才能访问构造'Inner'的实例。现在清楚吗?对不起:) –

相关问题