java - 为什么私有(private)类中有公共(public)方法?

标签 java

我正在浏览一段代码,它是这样的

// compare points according to their polar radius
public static final Comparator<Point2D> R_ORDER = new ROrder();
.
.
.
private static class ROrder implements Comparator<Point2D> {
    public int compare(Point2D p, Point2D q) {
        double delta = (p.x*p.x + p.y*p.y) - (q.x*q.x + q.y*q.y);
        if (delta < 0) return -1;
        if (delta > 0) return +1;
        return 0;
    }
}

为什么我们在私有(private)静态类中有这样的公共(public)方法。如果我做了 ROrder 会有什么害处

  1. 非静态
  2. 公开

最佳答案

ROrder Non-Static

通过使其成为非静态,您将需要容器类的实例来创建ROder 的实例,这可能是由于类的设计不会做逻辑。只有当你确实需要外部类的实例来获取内部类的实例时,你才应该保持类非静态。

ROrder Public

同样是因为他们想限制在此类上下文之外使用 ROrder。他们不希望任何客户端代码或其他代码随意创建 ROrder 的实例,因为它们没有任何用处。

Why do we have such public methods inside private static classes.

在这种情况下,因为您正在实现一个 interface Comparator 并且您将传递此比较器用于其他用途,例如排序,并且您需要 Collections 类具有compare 方法的可见性,因此该方法必须是public,即使实现该接口(interface)的类是private

所以这只是增强代码的可读性使用意图的合乎逻辑的方法。

逻辑使用

此类希望字符串采用某种格式。

public class SomeClass{

     private static class StringHelper{
          //will do the task of parsing and validating that string object
     } 
}

现在在这种情况下,您不希望保留 StringHelperpublic,因为它的使用过于本地化而无法重用。所以你宁愿通过保持它 private 来强调这一点。如果 StringHelper 实现了一些接口(interface),则可以有 public 的方法。

更新:

You should keep class non-static only when you really need the instance of outer class to get the instance of inner class.

关于这一点,我认为答案可能过于宽泛,但我会尽量简短地解释一下。我的意思是,如果内部类对象共享其处理所依赖的外部对象的某些状态,那么您将需要的对象外部类与内部类对象共享其状态,但是如果内部类实例独立于外部类的状态,那么保留内部类是安全的 静态

关于java - 为什么私有(private)类中有公共(public)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18868462/

相关文章:

Java ssh-rsa 字符串到公钥

java - 如何配置 Quarkus 超过 20 个 Mysql 连接?

java - 具有执行器的 JUnit 服务类立即返回控制权

java - 在 Android 上下载的视频只能从应用程序播放

java - 双(象棋)计时器

java - 访问数组的多种方式

java - 如何使用 Rabbit 绑定(bind)创建具有事务和 DLQ 的处理器?

java - 如何更改 ScrollPane 滚动的量?

java - Spring MVC Controller 中的硬编码@RequestMapping URL

java - Maven `help:effective-pom` 只为单个项目生成,而不是所有项目