gpt4 book ai didi

java - 为什么内部静态类会扩展外部抽象类?

转载 作者:搜寻专家 更新时间:2023-11-01 04:07:23 25 4
gpt4 key购买 nike

我正在尝试扩展一些使用复合模式实现树的现有代码。正如此模式所预期的那样,有一个接口(interface) (Node) 和表示通用节点的抽象类 (AbstractNode)。后者由多个具体类型的节点(ConcreteNodeAConcreteNodeBConcreteNodeC)扩展。

我在使用的代码中遇到了另一种模式,其中具体类实现为静态内部类,扩展了外部抽象类。同时,它们从外部(?)接口(interface) Node< 实现静态内部接口(interface)(NodeANodeBNodeC)/

public interface Node {
public static interface NodeA {}
public static interface NodeB {}
public static interface NodeC {}
}

public abstract class AbstractNode implements Node {

public void foo() {
...
}

public void bar() {
...
}

...

public static class ConcreteNodeA extends AbstractNode implements Node.NodeA {
...
}

public static class ConcreteNodeB extends AbstractNode implements Node.NodeB {
...
}

public static class ConcreteNodeC extends AbstractNode implements Node.NodeC {
...
}
}

这个图案有什么用?通过多年的 Java 经验,我以前从未见过这样的事情。我的直觉告诉我这是一种巨大的代码味道,因为具体类在整个代码中不断被实例化和使用多次。反正我不担心效率,只是这太难维护和扩展了!。将它们放在不同的类(class)会更有意义,对吧?

我已经搜索了更正式的引用资料来证明这样做是个坏主意,但还没有找到任何东西。

没有编译错误,代码完美运行。

最佳答案

这种模式在描述相关的类型族时实际上很常见,例如树的节点。

一个原因很简单,它是一个方便的分组;这些类通常很小,将它们全部放在一个地方可以使其更易于阅读和维护,并发出它们是紧密耦合的家族并打算一起使用的信号。

更有说服力的原因是它可以提供一种密封类的形式。通过在抽象类中拥有私有(private)构造函数,只有内部类可以访问它,这意味着内部类是唯一允许的子类。

关于java - 为什么内部静态类会扩展外部抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47660968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com