【问题标题】:Is there a way to do partial classes in Java (like C#)?有没有办法在 Java 中做部分类(如 C#)?
【发布时间】:2013-12-13 22:51:27
【问题描述】:

C# 有一个很棒的概念,一个类可以分布在多个 .cs 文件中。这在您想要一个对象(所有代码都需要的成员变量)但有大量代码的情况下非常有用。然后,您可以按功能在源文件中分散此代码。

有没有办法在 Java 中做到这一点?

更新:好吧,起初我告诉自己这必须是一个大类(它执行 DOCX 文件内容的布局)。但是在发布这个之后,我想了更多,它真的让我很困扰,这是一个很大的(目前 5,000 多行)类。

所以我考虑了一些替代方案,并想出了一个很好的方法来将其分解为一个主类和大约 20 个辅助类。这种方式非常有效,将功能真正分离到每个部分。

所以...虽然我认为部分类有时是一个有用的构造,但在这种情况下,部分类的缺乏使我想出了一个更好的设计。 (这与最初的问题无关,但我认为值得分享。)

【问题讨论】:

  • 看起来像no
  • 如果你的类足够大,需要多个文件,你可能需要重构它,让它不需要。如果我必须维护它,那是我要做的第一件事。
  • @JimGarrison 通常是这样,但我个人喜欢 (a) 设计器和 (b) 具有静态方法类并且仍然能够整齐地组织它们的功能。这是一种您永远不应该过度使用的功能,但有时会派上用场

标签: java partial-classes


【解决方案1】:

没有。 Java 不支持部分类。您可以在this questionthis question 中找到更深入的讨论。

【讨论】:

    【解决方案2】:

    不,Java 不支持部分类。

    如果这只是无聊的好奇心,请查看Scala。它像 Java 一样编译为 .class 文件,并具有完整的互操作性。它支持大致相当于部分类的“特征”。

    特征使用示例:

    trait FunctionalityA {
      // some stuff implemented here
    }
    
    trait FunctionalityB {
      // more stuff implemented...
    }
    
    // etc...
    
    class MyBigClass extends FunctionalityA with FunctionalityB with FunctionalityC
    

    【讨论】:

    • Scala 还支持隐式类向现有类添加方法,但这确实是通过包装现有对象来实现的,因此它在运行时会消耗时间和内存。
    【解决方案3】:

    我找到了一种方法来模拟 C# 部分类依赖于 lombok 中的 @Delegate

    @Getter 
    @Setter
    public class User {
        String name;
        @Delegate
        private UserDelegate delegate= new UserDelegate(this);
    }
    public class UserDelegate {
      private User expandOwner;
    
      public UserDelegate(User expandOwner) {
        this.expandOwner = expandOwner;
      }
    
      public void doSomethinga() {
        System.out.println(expandOwner.getName() + "did something!");
      }
    }
    // how to use:
    User user= new User();
    user.setName("Chrisme");
    user.doSomethinga();
    

    您可以通过委托类中的expandOwner访问原始类的公共方法。

    【讨论】:

      【解决方案4】:

      没有办法让部分类定义分布在文件中。每个类都必须在其自己的同名文件中定义。

      相反,您可以在该文件和(顶级)类定义中定义其他类。

      【讨论】:

        【解决方案5】:

        不,它是 Java 的美妙特性之一。一个类必须与她的文件名相同。 :-)

        【讨论】:

        • 这是不正确的。在 Java 中,您可以在一个文件中包含多个类。
        • 另外,java 支持匿名类,这些类没有名字并且可以在一个类中出现多次。
        猜你喜欢
        • 1970-01-01
        • 2019-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-20
        • 2011-02-23
        • 2015-12-07
        • 2011-07-30
        相关资源
        最近更新 更多