2016-03-25 119 views
1

我有以下類:如何在構造函數中設置對象枚舉類型?

try { 
    File file = new File("resources/Owner.txt"); 
    Scanner fileContent = new Scanner(file); 
    while (fileContent.hasNextLine()) { 
      String[] person = fileContent.nextLine().split(" "); 
      this.data.add(new Owner(owner[0],owner[1])); 
     } 
    } catch (FileNotFoundException err){ 
     System.out.println(err); 
    } 

凡Owner.txt具有的格式:

ID TYPE 

public class Owner { 

    private final Integer id; 
    private final OwnerType type; 

    public Owner(Integer iId, Enum eType) { 
     this.id= iId; 
     this.lastName = lName; 
     this.type = eType // how should that work? 
    } 

} 

而且

public enum OwnerType { 
    HUMAN,INSTITUTION 
} 

對此我通過呼叫

就像那個:

1 HUMAN 
2 INSTITUTION 

我的問題是:

我如何指定我的所有者對象的type財產時,我調用下面?

new Owner(owner[0],owner[1]) 
+0

什麼是「所有者」?它持有什麼類型? – Stultuske

+4

首先,你可以改變'Enum'的名字,使它不是'java.lang'包中的類的名字嗎?它會使你的代碼和你的問題更加簡單。 –

+0

您的「構造函數」名稱('AccountOwner')與類名稱('Owner')不匹配。 – Mena

回答

2

這裏有兩個問題。

首先,Owner的構造函數應該接受一個OwnerType,不是任何Enum

public Owner(Integer iId, OwnerType eType) { 
    this.id= iId; 
    this.type = eType; 
} 

當解析輸入文件,你可以使用valueOf方法將字符串值轉換爲OwnerType

this.data.add 
    (new Owner(Integer.parseInt(owner[0]), OwnerType.valueOf(owner[1]))); 
1

任何Enumeration對象在默認情況下該方法的valueOf(String鍵)時,這是什麼方法做的是搜索到的所有定義的值到你的枚舉類,如果發現它返回正確的。

欲瞭解更多信息時刻關注這一點:

https://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html#valueOf%28java.lang.Class,%20java.lang.String%29enter link description here

在這種特殊情況下的枚舉;

public enum OwnerType { 
    HUMAN,INSTITUTION 
} 

如果我們使用OwnerType.valueOf( 「人」),將返回枚舉型人

這裏使用:

try { 
    File file = new File("resources/Owner.txt"); 
    Scanner fileContent = new Scanner(file); 
    while (fileContent.hasNextLine()) { 
     String[] person = fileContent.nextLine().split(" "); 
     this.data.add(new Owner(person[0],OwnerType.valueOf(person[1]))); 
    } 
} catch (FileNotFoundException err){ 
    System.out.println(err); 
} 
+0

請解釋你的答案。代碼轉儲沒有解釋是沒有用的。 –