簡體   English   中英

有沒有辦法在 Java 中執行部分類(如 C#)?

[英]Is there a way to do partial classes in Java (like C#)?

C# 有一個很棒的概念,其中一個類可以分布在多個 .cs 文件中。 這在您需要單個對象(所有代碼都需要的成員變量)但有大量代碼的情況下非常有用。 然后,您可以通過源文件中的功能將此代碼展開。

有沒有辦法在 Java 中做到這一點?

更新:好的,一開始我告訴自己這必須是一個大類(它執行 DOCX 文件內容的布局)。 但是在發布這個之后,我想了更多,它真的讓我感到困擾,這是一個大的(目前有 5,000 多行)類。

因此,我考慮了一些替代方案,並想出了一種將其分解為一個主類和大約 20 個輔助類的好方法。 這種方式非常有效,真正將功能分離到每個部分。

所以...雖然我認為部分類有時是一個有用的構造,但在這種情況下,缺少部分類使我想出了更好的設計。 (這與最初的問題無關,但我認為值得分享。)

不。Java 不支持部分類。 你會在這個問題這個問題中找到更深入的討論。

不,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM