2012-08-22 40 views
0

我有一個只接受字符串的方法。Java - 如何將字符串設置爲靜態int

public void setVerticalAlignment(String align) { 
      ... 
    gd.verticalAlignment = align; // accepts only int. 
      ... 
} 

gd.verticalAlignment只接受int。 通常這是由類似gd.verticalAlignment = SWT.TOP設置的,其中SWT.TOP是一個靜態int。

是否有可能用類似setVerticalAlignment("SWT.TOP")的方法調用此方法?

+0

你爲什麼不直接轉換字符串?的Integer.parseInt(對準); – oopbase

+2

爲什麼你使用字符串進行對齊? – Baz

+1

將'setVerticalAlignment(String align)'更改爲'setVerticalAlignment(int align)'並調用call'obj.setVerticalAlignment(SWT.TOP)'。 – maba

回答

4

如果你使用的Java 7,你總是可以在字符串中使用switch

switch (align) { 
    case "SWT.TOP": 
     gd.verticalAlignment = SWT.TOP; 
    /* etc */ 
} 

誠實我會避免使用字符串像"STW.TOP"。如果我真的必須以另一種方式存儲對齊狀態,而不是僅僅使用int,那麼我會在舊版本的Java中使用可用於switch的枚舉。

2

聽起來像是你想有一個地圖:

// Ideally use ImmutableMap from Guava 
private static final Map<String, Integer> ALIGNMENTS = mapAlignments(); 

private static final Map<String, Integer> mapAlignments() { 
    Map<String, Integer> ret = new HashMap<String, Integer>(); 
    ret.put ("SWT.TOP", SWT.TOP); 
    // etc 
    return ret; 
} 

然後,你可以從地圖(和拆箱)獲取更高版本。

或者,更好的,改變你的方法聲明,以避免這種情況擺在首位:)如果字符串不指定爲整數值

0
Integer.parseInt(String) 

可以拋出一個NumberFormatException。 同樣在java的prev版本中,你不能在字符串上應用開關大小寫。因此,您可以使用以下內容:

if(("SWT.TOP").equals(align)) 
{ 
    gd.verticalAlignment = SWT.TOP; 
} 
0

爲什麼使用文本字段?對齊只有少數法律選擇,所以你應該使用類似JComboBox的東西。你可以自定義的存儲對象中的JComboBox讓他們顯示命名常量而且還可以存儲整型常量:

public class SwingAlignOption { 
    public final String name; 
    public final int value; 
    public SwingAlignOption(String name, int value) { 
    this.name = name; 
    this.value = value; 
    } 
    public String toString() { return name; } 
} 

然後你就可以實例添加到組合框狀comboBox.addItem(new SwingAlignOption("TOP", SWT.TOP))

請注意,JComboBox在Java 6和7之間進行了更改。在Java 7庫中,JComboBox是泛型的,這使得更容易在其中存儲像這樣的自定義對象並在以後檢索它們的值。在Java 6中,當訪問選定的值時必須使用強制轉換。

+0

我的意思是我解析從一個文本文件。不是GUI文本域.. – humansg

+1

好的,這更有意義。在這種情況下,我建議使用上面建議的'Map'或'switch'選項。 – DaoWen

相關問題