Java - 如何将String设置为static int

时间:2012-08-22 08:22:58

标签: java

我有一个只接受字符串的方法。

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

但是gd.verticalAlignment只接受一个int。 通常这是由gd.verticalAlignment = SWT.TOP设置的,其中SWT.TOP是静态int。

是否可以使用setVerticalAlignment("SWT.TOP")

之类的方法调用此方法

4 个答案:

答案 0 :(得分:4)

如果您使用Java 7,则始终可以在字符串上使用switch

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

老实说,我会避免使用像"STW.TOP"这样的字符串。如果我真的不得不以int以外的方式存储对齐状态,那么我将使用可能在旧版Java中switch中使用的枚举。

答案 1 :(得分: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;
}

然后你可以稍后从地图(和取消框)中获取。

或者,更好的是,首先更改方法声明以避免这种情况:)

答案 2 :(得分:0)

Integer.parseInt(String)
如果字符串未指定为整数值,

可以抛出NumberFormatException。 同样在java的prev版本中,你不能在字符串上应用switch-case。所以你可以更好地使用以下内容:

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

答案 3 :(得分: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中,当您访问所选值时,您必须使用强制转换。