C#有一个很棒的概念,即一个类可以分布在多个.cs文件中。这对于你想要一个单个对象(所有代码都需要的成员变量)而且需要大量代码的地方非常有用。然后,您可以通过源文件中的功能传播此代码。
有没有办法在Java中执行此操作?
更新:一开始我告诉自己这必须是一个大型的类(它执行DOCX文件内容的布局)。但是在发布之后我更多地想到它,这真的让我感到困扰的是它是一个大的(目前5000多行)类。
所以我想了一些替代方案,想出了一个很好的方法将它分解为一个主类和大约20个辅助类。这种方式非常好,真正将功能分离到每个部分。
所以...虽然我认为有时候部分类是一个有用的结构,但在这种情况下,缺少部分类会让我想出更好的设计。 (这与最初的问题无关,但我认为值得分享。)
答案 0 :(得分:16)
没有。 Java不支持部分类。您可以在this question和this 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中的一个很棒的功能。类必须与其文件名相同。 : - )