簡體   English   中英

有沒有辦法在Java中實現代數類型?

[英]Is there a way to implement algebraic types in Java?

在Java中,是否有可能強制某個類具有一組特定的子類而沒有其他子類? 例如:

public abstract class A {}
public final class B extends A {}
public final class C extends A {}
public final class D extends A {}

我可以以某種方式強制執行不能創建A的其他子類嗎?

為類A提供具有包級訪問性的構造函數(並且沒有其他構造函數)。

謝謝Dave L.,因為沒有其他建設者。

你可能想要一個枚舉(Java> = 1.5)。 枚舉類型可以具有一組固定值。 它具有類的所有好處:它們可以具有字段和屬性,並且可以使它們實現接口。 枚舉不能擴展。

例:

enum A {

  B,
  C,
  D;

  public int someField;

  public void someMethod() {
  }


}

您可以將A,B,C,D類放在一個單獨的包中,並使A類不公開。

教會編碼救援:

public abstract class A {
  public abstract <R> R fold(R b, R c, R d);
}

只有三種可能的實現方式:

public final class B extends A {
  public <R> R fold(R b, R c, R d) {
    return b;
  }
}

public final class C extends A {
  public <R> R fold(R b, R c, R d) {
    return c;
  }
}

public final class D extends A {
  public <R> R fold(R b, R c, R d) {
    return d;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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