Java类仅对当前文件可见

Java类仅对当前文件可见,java,Java,在Java中是否可以定义一个外部类(即顶层),使其仅对该文件可见?我想在C++中使用一些静态关键字来限制文件范围的可见性。 如果没有,原因是什么?解决方法是什么 谢谢。不,你要的是不可能的。您可以通过使类成为私有的静态内部类来隐藏类,也可以将它们设置为顶级的、受包保护的(默认)类,并将一小部分涉及的类放入它们自己的包中。不,您所要求的是不可能的。您可以通过使类成为私有的静态内部类来隐藏类,也可以将它们设置为顶级的、受包保护的(默认)类,并将一小部分涉及的类放入它们自己的包中。我不确定您真正想做什

在Java中是否可以定义一个外部类(即顶层),使其仅对该文件可见?我想在C++中使用一些静态关键字来限制文件范围的可见性。 如果没有,原因是什么?解决方法是什么


谢谢。

不,你要的是不可能的。您可以通过使类成为私有的静态内部类来隐藏类,也可以将它们设置为顶级的、受包保护的(默认)类,并将一小部分涉及的类放入它们自己的包中。

不,您所要求的是不可能的。您可以通过使类成为私有的静态内部类来隐藏类,也可以将它们设置为顶级的、受包保护的(默认)类,并将一小部分涉及的类放入它们自己的包中。

我不确定您真正想做什么,但是,为了详细说明@Ernest,您可以设置一个包访问类,为了彻底性,将其设为私有构造函数,在该类中仅此而已。然后,有一个包含“真实”内容的私有静态内部类。e、 g

class Foo {  // "package" access

   private Foo() {}

   private static class Bar {
      // real stuff here...
   }
}

p、 美国对此的投票应该交给欧内斯特,我只是详细阐述了他的想法。

我不确定您真正想做什么,但是,为了详细说明@Ernest,您可以创建一个包访问类,使其构造函数完全私有,在该类中仅此而已。然后,有一个包含“真实”内容的私有静态内部类。e、 g

class Foo {  // "package" access

   private Foo() {}

   private static class Bar {
      // real stuff here...
   }
}
p、 美国对此的投票应该交给欧内斯特,我刚才详细阐述了他的想法

如果不是,为什么

对于这样的语言设计问题,唯一能得到真正答案的方法就是询问语言设计师

然而,以下原因可能涵盖了这一点

  • 一种试图支持太多东西的编程语言将变得太复杂,无法指定和实现,也无法让普通程序员理解。前者导致语言异常和编译器错误,后者导致应用程序中的错误

  • Java语言设计者认为4个级别的访问/可见性就足够了<代码>公共,
    受保护
    ,包专用和
    专用

  • Java语言设计人员设计用于源代码没有组织/存储在离散文件中的情况。事实证明,(几乎)每个人仍然使用离散文件来表示源代码。。。但他们不知道(20多年前)

如果不是,为什么

对于这样的语言设计问题,唯一能得到真正答案的方法就是询问语言设计师

然而,以下原因可能涵盖了这一点

  • 一种试图支持太多东西的编程语言将变得太复杂,无法指定和实现,也无法让普通程序员理解。前者导致语言异常和编译器错误,后者导致应用程序中的错误

  • Java语言设计者认为4个级别的访问/可见性就足够了<代码>公共,
    受保护
    ,包专用和
    专用

  • Java语言设计人员设计用于源代码没有组织/存储在离散文件中的情况。事实证明,(几乎)每个人仍然使用离散文件来表示源代码。。。但他们不知道(20多年前)


只有该文件才能看到外部类有什么用?我不太熟悉C++。我想知道如何将java类也限制到另一个特定的包或java类,如果可能的话。@ TykSLASI:一个示例使用是能够实例化该类的实例,只为这个文件中定义的类。@ SHiRKiT:这些比我的问题要求更高。我的问题是更自然的,因为C++可以做到这一点。我不太熟悉C++。我想知道如何将java类也限制到另一个特定的包或java类,如果可能的话。@ TykSLASI:一个示例使用是能够实例化该类的实例,只为这个文件中定义的类。@ SHiRKiT:这些比我的问题要求更高。我的问题更自然,因为C++可以做到这一点。1,但它们不必是静态私有内部类,对,只是私有内部(可选静态)?不,它们不必是静态的,但静态的只与顶层类最小不同。这正是他所追求的。@maerics使内部类成为非静态类将它们绑定到外部类的实例。这可能非常有用,但许多用户确实想要私有类,只是忘记(或不知道)static关键字。我认为一些静态代码分析器实际上警告您,如果不使用外部类的成员,就不要创建非静态的内部类。默认情况下始终创建静态内部类。@owlstead:是的,感谢您提供的信息,我知道静态内部类和非静态内部类之间的区别,只是想指出,静态并不是严格要求达到OP所寻求的效果,虽然它们通常比非静态类更有用。+1但它们不必是静态的私有内部类,对吧,只是私有内部类(可选静态)?不,它们不必是静态的,但静态类与顶级类的区别很小,这正是他所追求的。@maerics使内部类成为非静态类将它们绑定到外部类的实例。这可能非常有用,但许多用户确实想要私有类,只是忘记(或不知道)static关键字。我认为一些静态代码分析器实际上警告您,如果不使用外部类的成员,就不要创建非静态的内部类。始终创建静态inne