【问题标题】:What is the difference in visibility modifiers inside private class?私有类中的可见性修饰符有什么区别?
【发布时间】:2015-05-08 01:01:41
【问题描述】:

就像标题一样。为什么首先允许在私有类中使用任何修饰符?私有类在文件之外是不可见的,所以无论如何我们都无法访问它们。如果这些类中的可见性很重要,那么推荐使用哪个?

【问题讨论】:

标签: java access-modifiers


【解决方案1】:

您的私有类仍然可以实现公共接口(或扩展可访问的类)。

或者可能只是覆盖toStringequalshashCode(所有这些都必须是公开的)。

【讨论】:

  • 如果我理解正确,您的意思是私有类中存在访问修饰符,因此您可以实现/扩展,编译器不允许限制方法的可见性。但是,我仍然不能在文件之外使用此类方法,因此所有方法/字段都可以隐式设置为公共(因此永远不会限制可见性)
  • 为什么不能在文件外使用这些方法?您可以让私有类实现 ComparatorRunnableCollection 并从您的方法中返回它的实例。调用该方法的代码可以在您的私有类实例上调用 comparerunsize
  • 我可能做错了,但是在我的测试中,当一个私有类实现一个接口时,当我在另一个文件中检索对象时,编译器不允许我使用这种方法(类型Test.Nested 不可见)
  • Test.Nested 类型不可见,但您可以将其键入为Object(或Runnable 或它具有的任何接口)。 Object x = test.methodReturnsMyPrivateInstance(); x.toString();
  • @请您不能直接在包含类之外访问该类型,不,但如果您有private class MyComparator implements Comparator<Me>,您可以从public Comparator<Me> createComparator() 方法返回该类的实例,调用者可以将返回的引用分配给Comparator<Me> 类型的变量。
【解决方案2】:

一个区别:privateClass.getMethods 将只返回公共方法

另一个:一些工具,比如 JAXB,可能正​​在寻找公共的 setter/getter

【讨论】:

  • 第二个,这样的工具不应该避免私有类吗?
  • 你可以有一个嵌套的私有类来反序列化xml数据
  • 那么,我是否应该将所有方法/字段设置为公开,只是因为某些工具可能需要它?
  • 仅当您要使用这些工具时,否则可见性没有真正的区别
猜你喜欢
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-26
  • 2011-07-15
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多