2012-08-22 38 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

相关问题