有没有办法用Java做部分类(比如C#)?

时间:2013-12-13 22:51:27

标签: java partial-classes

C#有一个很棒的概念,即一个类可以分布在多个.cs文件中。这对于你想要一个单个对象(所有代码都需要的成员变量)而且需要大量代码的地方非常有用。然后,您可以通过源文件中的功能传播此代码。

有没有办法在Java中执行此操作?

更新:一开始我告诉自己这必须是一个大型的类(它执行DOCX文件内容的布局)。但是在发布之后我更多地想到它,这真的让我感到困扰的是它是一个大的(目前5000多行)类。

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

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

5 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:7)

不,Java不支持部分类。

如果只是空闲的好奇心,请查看Scala。它像Java一样编译成.class文件,并且具有完全互操作性。它支持将部分类粗略地称为“特征”。

特质使用的一个例子:

trait FunctionalityA {
  // some stuff implemented here
}

trait FunctionalityB {
  // more stuff implemented...
}

// etc...

class MyBigClass extends FunctionalityA with FunctionalityB with FunctionalityC

答案 2 :(得分:0)

无法在文件中传播部分类定义。每个类都必须在自己的同名文件中定义。

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

答案 3 :(得分:0)

我找到了一种方法来依赖Lombok中依赖于@Delegate的C#局部类

@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 :(得分:-4)

不,这是Java中的一个很棒的功能。类必须与其文件名相同。 : - )