第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如果 Enum 是期望元素之一,請(qǐng)檢查 setter

如果 Enum 是期望元素之一,請(qǐng)檢查 setter

守候你守候我 2022-04-28 17:17:31
我想驗(yàn)證傳遞給 setter 的參數(shù)。我有一個(gè)枚舉,在這個(gè)枚舉中我有一個(gè)汽車顏色。在設(shè)置器中,我想檢查傳入的參數(shù)是否是我的 Color 枚舉的一部分。我正在尋找任何枚舉方法,但我沒有找到任何方法。我嘗試使用正則表達(dá)式,但這不是一個(gè)好主意。public enum Color {  BLUE, RED, BLACK, WHITE}public void setColor(String color) {    //hear should be a method checking if a color contain enum    this.color = color;}我希望這個(gè)元素將包含一個(gè)枚舉。
查看完整描述

1 回答

?
HUWWW

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊

tl;博士

在設(shè)置器中,我想檢查傳入的參數(shù)是否是我的 Color 枚舉的一部分。

錯(cuò)誤的做法。您應(yīng)該傳遞一個(gè) object,您的枚舉對(duì)象之一,而不是顏色名稱的文本。

請(qǐng)參見poster.setBackgroundColor( Color.GREEN )下面的示例。

這就是在 Java 中使用枚舉的要點(diǎn):讓編譯器在編譯時(shí)檢查是否傳遞了有效值,而不是擔(dān)心在運(yùn)行時(shí)驗(yàn)證代碼。

細(xì)節(jié)

看起來你在混淆一些東西。您可能混淆了枚舉實(shí)例(一個(gè)常量)、它的硬編碼名稱以及您可能希望在運(yùn)行時(shí)向用戶顯示的名稱。

AnEnum是一種方便地實(shí)例化預(yù)定數(shù)量的類實(shí)例的方法,每個(gè)實(shí)例都被分配一個(gè)預(yù)定的名稱。例如,Month,Month.JANUARY通過Month.DECEMBER

常數(shù)名稱

如果您想要實(shí)例的硬編碼名稱,按照約定全部大寫(作為常量),然后調(diào)用toString.

String constantName = Month.JANUARY.toString() ;

一月

這里要非常清楚:String帶有文本“JANUARY”的對(duì)象是由Month名為 的對(duì)象生成的JANUARY。客體和客體是完全分開和不同的MonthString的文本String只是Month對(duì)象值的表示。

如果要通過該硬編碼實(shí)例名稱獲取常量,請(qǐng)調(diào)用valueOf.

Month m = Month.valueOf( "JANUARY" ) ;  // Returns a `Month` object, not text.

盡量不要養(yǎng)成習(xí)慣valueOf。調(diào)用valueOf破壞了 Java 中枚舉的目的和功能。您應(yīng)該傳遞枚舉對(duì)象,而不是它們的名稱字符串。

顯示名稱

這些全大寫的英文值可能足以用于日志記錄和調(diào)試。但我們不太可能希望全大寫英文文本出現(xiàn)在我們的用戶界面和報(bào)告中。因此,在編寫自己的代碼時(shí)Enum,請(qǐng)?zhí)砑右粋€(gè)名為類似的方法getDisplayName,如Month&所示DayOfWeek。指定TextStyle縮寫的長度,以及Locale翻譯中使用的人類語言和文化規(guī)范。

String output = m.getDisplayName( 
    TextStyle.FULL , 
    Locale.CANADA_FRENCH ) ;

揚(yáng)維爾

如何在您自己的枚舉上實(shí)現(xiàn)它?好吧,您的枚舉實(shí)際上是Enum. 因此,您的枚舉實(shí)際上是一個(gè)與其他任何 Java 類一樣的 Java 類,因?yàn)樗梢跃哂袠?gòu)造函數(shù)和方法。為每個(gè)聲明的枚舉實(shí)例名稱添加參數(shù)。

示例類

這是單個(gè).java文件中的完整示例枚舉類,帶有main演示方法。

package work.basil.example;


import java.util.EnumSet;

import java.util.Set;


public enum Color {

    BLACK( "Black" ),                       // Pass arguments to each declared constant instant name, as you are really calling the constructor on each `static` `final` class constant object being automatically instantiated.

    GREY( "Grey" ),

    RED( "Red" ),

    GREEN( "Green" ),

    BLUE( "Blue" );


    private String displayName;             // Store the display name as a member variable on each enum instance.


    // Constructor     

    Color ( String displayName ) {          // Define a constructor taking the display name argument you passed above.

        this.displayName = displayName;

    }


    String getDisplayName ( ) {

        return this.displayName;

    }


    public static void main ( String[] args ) {

        System.out.println( "Color.BLACK.toString(): " + Color.BLACK.toString() );

        System.out.println( "Color.BLACK.getDisplayName(): " + Color.BLACK.getDisplayName() );


        Set < Color > monochromeColors = EnumSet.of( Color.BLACK , Color.GREY );

        boolean isRedMonochrome = monochromeColors.contains( Color.RED ); // ? false.

        System.out.println( "isRedMonochrome: " + isRedMonochrome );

    }

}

跑的時(shí)候。


Color.BLACK.toString(): 黑色


Color.BLACK.getDisplayName():黑色


isRedMonochrome: 假


注意使用EnumSet(or EnumMap) 來收集枚舉實(shí)例。這里我們定義了一個(gè)以黑色和灰色命名的Color對(duì)象集合,但忽略了紅色、綠色和藍(lán)色。SetmonochromeColors


要使用您的枚舉,請(qǐng)想象一個(gè)Poster具有海報(bào)背景顏色的 setter 方法的類。


Poster poster = new Poster() ;

poster.setBackgroundColor( Color.GREEN ) ;  

不需要文字 - 只需使用對(duì)象

請(qǐng)注意,沒有涉及文本。不需要實(shí)例名稱的字符串,也不需要顯示名稱。使用枚舉實(shí)例是關(guān)于使用對(duì)象,而不是文本,而不是String. 使用 enum 對(duì)象可確保值有效,提供類型安全性,并使您的代碼更具自我記錄性。


使用名稱

讓我們添加需要這些名稱的代碼。首先用于記錄,toString在Poster.


@Override public String toString() {

    return "Poster{ name=" + this.name + " | backgroundColor: " + this.backgroundColor.toString() + " }" ;  // Shows "GREEN"

}

在用戶界面中展示海報(bào)時(shí),顯示顏色的名稱。


Label label = new Label( 

    "Background color: " + 

    poster.getBackgroundColor().getDisplayName()   // Shows "Green".

) ;


查看完整回答
反對(duì) 回復(fù) 2022-04-28
  • 1 回答
  • 0 關(guān)注
  • 150 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)