[英]How To Implement A Method Signature That Will Return a Concrete Type of an Enum?
[英]How to implement certain method for enum type
我是編程和Java的新手,目前正在學習枚舉類型。
我創建了一個枚舉類型的Card
,它將每張卡的值存儲在一副紙牌中,例如2 = 2、3 = 3 ... Ace =11。每張圖片卡具有相同的值10。
我正在嘗試實現方法getPrevious()
,該方法將返回列表中的上一個枚舉值。 例如,如果在SIX
上調用了該方法,則它將返回FIVE
,而在TWO
被調用時,將返回ACE
。 但是,我正在努力尋找一種方法來做到這一點。
在下面,您可以看到我所編寫的當前代碼,有關如何實現方法getPrevious()
任何幫助或提示都將非常有用。
public class EnumPractice {
public enum Card {
TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8),
NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11), ;
private int value;
private Card card;
Card(int value){
this.value = value;
}
public int getValue(){
return value;
}
public String toString(){
return "The value of this card is: " + value;
}
}
public static void main(String[] args) {
System.out.println(Card.ACE.getValue());
}
}
您的getPrevious()
方法如下所示
public enum Card {
TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8),
NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11);
private int value;
Card(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public Card getPrevious() {
int previous = ordinal() - 1;
if (previous < 0 ) { // if negative, then we have to go to the last element
previous += values().length;
}
return Card.values()[previous];
}
}
這是您的getPrevious()
實現
import java.util.Arrays;
public class EnumPractice {
public enum Card {
TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8),
NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11), ;
private int value;
private Card card;
Card(int value){
this.value = value;
}
public int getValue(){
return value;
}
public String toString(){
return "The value of this card is: " + value;
}
public Card getPrevious() {
int pos = ordinal();
if (pos == 0)
return ACE;
return values()[pos - 1];
}
}
public static void main(String[] args) {
System.out.println(Card.THREE.getPrevious());
System.out.println(Card.TWO.getPrevious());
}
}
上面的程序輸出是
The value of this card is: 2
The value of this card is: 11
其他方法可能是保留對先前卡的引用。 您可以在所有卡都在靜態塊中創建后進行設置,例如:
public enum Card {
TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8),
NINE(9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11);
private int value;
private Card previous;
static{
//lets set previous element for cards
//we will iterate starting from TWO so its previous should be:
Card previous = ACE;//yes ACE
for (Card card : values()){
card.previous = previous;
previous = card;
}
}
Card(int value){
this.value = value;
}
public int getValue(){
return value;
}
public Card getPrevious(){
return previous; //<-- simple getter is enough since we took care
// of setting this value earlier in static
// initialization block
}
public String toString(){
return "The value of this card is: " + value;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.