我有一个只接受字符串的方法。
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 :(得分: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中,当您访问所选值时,您必须使用强制转换。