[英]Java several enums as getter/setter
我想使用枚舉 class 將書籍格式分配給書籍 object。 我遇到的問題是有些書有一種格式,而另一些有幾種。
public enum Format {
HARD_COVER, PAPERBACK, E_BOOK, AUDIOBOOK
}
假設第一本書只有一種格式,而第二本書有所有格式。 如何用 getter/setter 解決它?
如何用 getter/setter 解決它?
我不會這樣做,因為根據我的經驗,getter 和 setter 用於設置單個屬性。 如果我有一個需要屬性集合的 class,那么我會讓 class 包含一個列表:
List<Format> formats = new ArrayList<>();
接着:
public void addFormat(Format format) {
formats.add(format); // add to the ArrayList of Format
}
以及類似的用於從列表中刪除的removeFormat(Format format)
方法。
編輯:正如 Dorian Gray 在評論中正確指出的那樣,格式集合最好是Set<Format> initialized as an
因為這樣可以防止將重復的格式添加到集合中。
Set<Format> formatSet = EnumSet.noneOf(Format.class);
您可以使用按位運算符來擁有一個可能具有多個值的屬性。
具有int
值的枚舉,如下所示:
public enum Format {
HARD_COVER(1),
PAPERBACK(2),
E_BOOK(4),
AUDIOBOOK(8);
public final int value;
Format(int value) {
this.value = value;
}
}
在您的Book
class 添加一個名為format
的int
屬性而不是Format
屬性。 還要創建一個名為isFormat
的方法,該方法根據其Format
參數返回boolean
值:
class Book {
private int format;
public Book(int format) {
this.format = format;
}
public boolean isFormat(Format format) {
return format.value == (this.format & format.value); // &: bitwise and
}
}
最后創建一本書,添加由 | 分隔的格式 (按位或):
Book book = new Book(Format.E_BOOK.value | Format.HARD_COVER.value | Format.AUDIOBOOK.value);
並像這樣檢查它的格式:
System.out.println("Is paperback?: " + book.isFormat(Format.PAPERBACK));
System.out.println("Is hard cover?: " + book.isFormat(Format.HARD_COVER));
System.out.println("Is audio book?: " + book.isFormat(Format.AUDIOBOOK));
System.out.println("Is E-book?: " + book.isFormat(Format.E_BOOK));
這個執行的結果是這樣的:
Is paperback?: false
Is hard cover?: true
Is audio book?: true
Is E-book?: true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.