[英]Is there a way to do partial classes in Java (like C#)?
C# 有一個很棒的概念,其中一個類可以分布在多個 .cs 文件中。 這在您需要單個對象(所有代碼都需要的成員變量)但有大量代碼的情況下非常有用。 然后,您可以通過源文件中的功能將此代碼展開。
有沒有辦法在 Java 中做到這一點?
更新:好的,一開始我告訴自己這必須是一個大類(它執行 DOCX 文件內容的布局)。 但是在發布這個之后,我想了更多,它真的讓我感到困擾,這是一個大的(目前有 5,000 多行)類。
因此,我考慮了一些替代方案,並想出了一種將其分解為一個主類和大約 20 個輔助類的好方法。 這種方式非常有效,真正將功能分離到每個部分。
所以...雖然我認為部分類有時是一個有用的構造,但在這種情況下,缺少部分類使我想出了更好的設計。 (這與最初的問題無關,但我認為值得分享。)
不,Java 不支持部分類。
如果這只是無聊的好奇心,請查看Scala 。 它像 Java 一樣編譯為 .class 文件,並且具有完整的互操作性。 它支持部分類的粗略等價物作為“特征”。
trait 用法的一個例子:
trait FunctionalityA {
// some stuff implemented here
}
trait FunctionalityB {
// more stuff implemented...
}
// etc...
class MyBigClass extends FunctionalityA with FunctionalityB with FunctionalityC
我找到了一種模擬 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 訪問原始類的公共方法。
沒有辦法讓部分類定義分布在文件中。 每個類都必須在其自己的同名文件中定義。
相反,您可以在該文件和(頂級)類定義中定義其他類。
不,它是 Java 中的一項精彩功能。 Class 必須與她的文件名相同。 :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.