首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 枚舉類定義錯誤修正:構造器與方法放置位置

     編輯:程式設計疑難解答

問題代碼

public class EnumTest {
    public static void main(String[] args) {
        // ... 輸入處理 ...
        Size size = Enum.valueOf(Size.class, input);
        System.out.println("abbreviation=" + size.getAbbreviation()); // 報錯
    }

    public static String abbreviation; // 錯誤:靜態字段被所有實例共享

    enum Size {
        SMALL, MEDIUM, EXTRA_LARGE, EXTRA_EXTRA_LARGE
    }

    private void Size(String abbreviation) { // 錯誤:枚舉構造器必須私有且在枚舉內部
        this.abbreviation = abbreviation;
    }

    public String getAbbreviation() { // 錯誤:方法應在枚舉內部
        return abbreviation;
    }
}

錯誤分析

  1. 構造器位置錯誤:枚舉構造器必須定義在 enum 內部,且默認 private。
  2. 字段作用域錯誤:abbreviation 應為枚舉實例字段,而非外部類靜態字段。
  3. 方法歸屬錯誤:getAbbreviation() 應屬於枚舉類型 Size。
  4. 枚舉常量缺少參數:定義常量時需傳入構造器參數,如 SMALL("S")。

修正代碼

public class EnumTest {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("請輸入服裝型號:(SMALL,MEDIUM,LARGE,EXTRA_LARGE,EXTRA_EXTRA_LARGE)");
        String input = in.next().toUpperCase();
        Size size = Enum.valueOf(Size.class, input);
        System.out.println("Size=" + size);
        System.out.println("abbreviation=" + size.getAbbreviation()); // 正確調用
        if (size == Size.EXTRA_LARGE || size == Size.EXTRA_EXTRA_LARGE) // 原 ^ 應為 ||
            System.out.println("很好,你注意到了下劃線");
    }
}

enum Size {
    SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL"), EXTRA_EXTRA_LARGE("XXL");

    private final String abbreviation; // 實例字段

    Size(String abbreviation) { // 私有構造器
        this.abbreviation = abbreviation;
    }

    public String getAbbreviation() { // 實例方法
        return abbreviation;
    }
}

關鍵點

  • 枚舉常量後跟參數列表調用構造器。
  • 字段用 private final 修飾保證不可變性。
  • 邏輯判斷中 ^ 是位異或,應用 || 邏輯或。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved