【问题标题】:Java code for composition [closed]用于组合的 Java 代码 [关闭]
【发布时间】:2013-08-23 11:16:08
【问题描述】:

是否可以在 Java 中实现组合? 如果我们创建了一个类A,并且在B类中使用了这个类的一个实例,那么如何保证A不能自己创建一个独立的对象呢?

【问题讨论】:

  • 所以根据我得到的回复,我可以安全地得出结论,除了使用内部类(这太明显了),不可能在 Java 中实现组合。因此,第三方类永远不能作为组合包含在内。
  • 如果你有一个第三方类你“不能创建一个独立的对象”,你怎么能在合成中使用它?
  • @AmitKhanna:我当然可以创建第三方类的对象。我只是想确认第三方类永远不能用于组合(我是否可以将其作为对象)。
  • 为什么回复的意思是不能用Java实现组合?即使可以在 B 之外创建 A 类的实例,这如何违反组合?
  • 聚合 - 引用的对象可以独立存在,组合 - 对象不能存在于其父对象之外。例如。你可以把眼镜放在一起,由两只手组成。

标签: java inheritance composition


【解决方案1】:

我认为这是不可能的。唯一类似的解决方案是将 A 创建为 B 的私有内部类。然后除了 B 之外没有其他人可以实例化 A。

【讨论】:

    【解决方案2】:

    您可以将组合类作为容器类的内部类。

    class ContainerClass{
    
        class ContainedClass1{
    
        }
    
        class ContainedClass2{
    
        }
    
    }
    

    通过这种方式,它们与ContainerClass 的实例相关联,并且如果没有相同的实例就无法创建。您可以将它们设为私有,然后它们只能在类中创建

    【讨论】:

    • 能否请您详细说明或举例说明。
    • @qualtar 和接受的答案基本一致。
    【解决方案3】:

    如果我正确理解你的问题,你想要的是一个内部类。本质上是为了创建一个内部类,你在 B 类中编写 A 类。

    【讨论】:

      【解决方案4】:

      您可以将 A 类创建为 B 的静态内部类,并将 A 的构造函数保持为私有。那么只有 B 可以使用这个构造函数。

      一些参考链接:

      scope of private constructor in Nested Class

      【讨论】:

        【解决方案5】:

        也许你可以使用 classLoaders 来确定 A 类是否从 B 加载

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-17
          • 2012-09-18
          • 2012-07-07
          • 1970-01-01
          • 2017-09-25
          • 1970-01-01
          • 2015-08-31
          • 2016-12-16
          相关资源
          最近更新 更多