Java - 内部类构造函数 - 仅允许外部类使用

13
我在代码中有一个内部类。我想让其实例可以公开访问,但只有外部类才能创建这些实例,就像“私有”访问一样。是否可能在不创建小包(或为每个这样的内部类创建公共接口)的情况下实现?
(如果我的英语不好,对不起 :P)
3个回答

27

这是可能的。将内部类声明为public,但构造函数为private。这样,你只能在封闭类及其本身内部创建该类,但不能从外部创建。


2
外部类真的可以访问内部类的私有字段吗?如果可以的话,这是个好消息,谢谢! - Krzysztof Stanisławek
1
不,这个解决方案是正确的,外部类可以看到内部类的所有私有字段、方法和构造函数。 - WilQu
好的,我已经测试过了,@WilQu和LastFreeNickname,你们是对的,谢谢! - Krzysztof Stanisławek

1

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

内部类 是其封闭类的成员。

你不需要做任何事情。

非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有成员也可以。

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

参考。


构造函数应该只能为外部类提供(因此不能是public),但应该可以在外部使用此对象(因此类不能是private)。 - Krzysztof Stanisławek

0

所以将内部类的 private

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

你无法合法地调用私有默认构造函数,因为它是私有的。


当Inner是私有的时候,我无法在Outer之外使用它。我可以为这个类创建公共接口,但如果存在更好的解决方案,我想避免使用它。 - Krzysztof Stanisławek
这是你的问题“只有外部类应该能够创建这些实例”的解决方案。你能详细说明一下你的问题吗?你真正想要什么!目前不是很清楚。 - bNd
只有 Outer 对象应该可以访问构造 Inner 实例。现在清楚了吗?抱歉 :) - Krzysztof Stanisławek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接