你好,我有enum幾個月了。
public enum Months{
JANUARY, FEBUARY, MARCH,
APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER;
}
在服務中,我有一個方法應該只在月份大于MARCHie時才有效APRIL, MAY, ....。我怎樣才能更雄辯地寫出以下行:
public void monthCheck(Object object){
if (object.month!= Months.JANUARY || object.month!= Months.FEBUARY || object.month != Months.MARCH){
//do something here
}
}
編輯:我不能使用序數,因為我還有其他用例,例如:
如果我有待定、準備、準備、交付、完成、回傳的狀態列舉。我只想顯示狀態為 DELIEVED、COMPLETED 或 RETURNED 的訂單。我想寫一個這樣的方法,只有當狀態是 DELIEVED、COMPLETED 或 RETURNED 時才回傳
if (order.getStatus()=={DELIEVERED, COMPLETED or RETURNED})
{return order}
else{
throw new exception ("not valid status at this point");
}```
uj5u.com熱心網友回復:
你的列舉應該有 get/set 方法,比如
public enum Months {
JANUARY("january"), and so on;
String months;
Months(String months) {
this.months = months;
}
public String getMonths() {
return toggleStatus;
}
}
現在,當您在專案中的任何地方執行 Months.JANUARY.getMonths() 時,這將回傳“january”值。如果你寫
JANUARY("1"), FEBRUARY("2")
然后它會回傳 1,2 等等
uj5u.com熱心網友回復:
您可以向列舉添加屬性,因此您可以添加屬性“編號”。由于列舉是不可變的,因此必須通過建構式設定該值,并且以后無法更改——這非常適合您想要實作的目標。
public enum Month {
JANUARY(1),
FEBRUARY(2),
MARCH(3),
…
DECEMBER(12);
final public int number;
Month(final int number) {
this.number = number;
}
}
然后,您可以使用該屬性輕松比較您的月份。
final Month myMonth = …;
if (myMonth.number > Enum.MARCH) {
…
};
根據您的風格,您可以隱藏屬性并提供比較方法,例如。G。.comesAfter(Month); 你甚至可以制作Month實施Comparable<Month>。
小心:您可能會想使用Enum.ordinal()它。缺點是 a).ordinal()不承擔任何域語意,它僅反映您在代碼中定義列舉常量的順序。在這里使用它會為容易創建和難以發現的錯誤打開大門。b) 由于它不承擔語意,開發人員在閱讀month.ordinal() < otherMonth.ordinal()您的代碼中的類似內容時可能會對此處比較的內容感到困惑,并且可能需要瀏覽源代碼(如果有),從而浪費時間,而且——更重要的是——失去他們的心智模型要解決的實際問題。
提示:以單數命名列舉。型別的名稱指的是單個實體,就像String,List等類的情況一樣。列舉只是一個具有固定數量實體的特殊類。
uj5u.com熱心網友回復:
您可以使用ordinal()列舉上的 來實作此目的。
public void monthCheck(Object object) {
if(!(object instanceof Months)){
return;
}
Months input = (Months) object;
if( input.ordinal() > 2 ) {
/* your logic here */
System.out.println(input.ordinal());
}
}
uj5u.com熱心網友回復:
在此處嘗試此代碼:
public enum Months{
JANUARY, FEBUARY, MARCH,
APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER;
public void monthCheck(String str){
if (!str.equals(Months.JANUARY) ||
!str.equals(Months.FEBUARY) || !str.equals(Months.MARCH)){
//do somwthing here
}
}
}
在另一個類中需要時傳遞引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/369091.html
上一篇:嘗試將我的javanetbeansj表注冊表的資料放入MySQL時,我不斷收到錯誤訊息
下一篇:Sprintboot運行時錯誤:無法為方法publicabstractcom.example.demo.entity.Department創建查詢
