Java-如何将字符串设置为静态int

Java-如何将字符串设置为静态int,java,Java,我有一个只接受字符串的方法 public void setVerticalAlignment(String align) { ... gd.verticalAlignment = align; // accepts only int. ... } 但是,gd.verticalAlignment只接受int。 通常这是由类似于gd.verticalAlignment=SWT.TOP的东西设置的,其中SWT.TOP是一个静态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”)
的方法调用此方法?

如果使用Java 7,则始终可以在字符串上使用
开关:

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

老实说,我会避免使用像
“STW.TOP”
这样的字符串。如果我真的必须以另一种方式存储对齐状态,而不仅仅是
int
,我会使用枚举,在旧版本的Java中
switch
中可能会用到枚举。

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

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

老实说,我会避免使用像
“STW.TOP”
这样的字符串。如果我真的必须以另一种方式存储对齐状态,而不仅仅是
int
,我会使用枚举,在旧版本的Java中,
switch
中可能会用到枚举。

听起来你想要一个映射:

// 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;
}
//理想情况下使用番石榴的ImmutableMap
私有静态最终地图路线=地图路线();
专用静态最终地图mapAlignments(){
Map ret=new HashMap();
返回放置(“SWT.TOP”,SWT.TOP);
//等
返回ret;
}
然后,您可以稍后从映射中获取(并取消X)


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

听起来您想要一个地图:

// 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;
}
//理想情况下使用番石榴的ImmutableMap
私有静态最终地图路线=地图路线();
专用静态最终地图mapAlignments(){
Map ret=new HashMap();
返回放置(“SWT.TOP”,SWT.TOP);
//等
返回ret;
}
然后,您可以稍后从映射中获取(并取消X)

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

如果字符串未指定为整数值,则可以引发。 同样在java的早期版本中,不能对字符串应用开关大小写。因此,您可以更好地使用以下各项:

if(("SWT.TOP").equals(align))
{
     gd.verticalAlignment = SWT.TOP;
}
如果字符串未指定为整数值,则可以引发。 同样在java的早期版本中,不能对字符串应用开关大小写。因此,您可以更好地使用以下各项:

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

为什么要使用文本字段?对于对齐,只有几个合法的选择,所以您应该真正使用类似a的东西。您可以将自定义对象存储在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(newswingalignoption(“TOP”,SWT.TOP))


注意,JComboBox在Java6和Java7之间发生了变化。在Java7库中,JComboBox是通用的,这使得在其中存储像这样的自定义对象和以后检索它们的值变得更容易。在Java 6中,访问所选值时必须使用强制转换。

为什么要使用文本字段?对于对齐,只有几个合法的选择,所以您应该真正使用类似a的东西。您可以将自定义对象存储在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(newswingalignoption(“TOP”,SWT.TOP))


注意,JComboBox在Java6和Java7之间发生了变化。在Java7库中,JComboBox是通用的,这使得在其中存储像这样的自定义对象和以后检索它们的值变得更容易。在Java 6中,访问所选值时必须使用强制转换。

为什么不转换字符串呢?整数.parseInt(align);为什么要使用字符串进行对齐?将
setVerticalAlignment(stringalign)
更改为
setVerticalAlignment(int-align)
并调用call
obj.setVerticalAlignment(SWT.TOP)
。您可以从文本字段使用.im解析。所以输入是字符串。所以我将类型设置为字符串…为什么不转换字符串呢?整数.parseInt(align);为什么要使用字符串进行对齐?将
setVerticalAlignment(stringalign)
更改为
setVerticalAlignment(int-align)
并调用call
obj.setVerticalAlignment(SWT.TOP)
。您可以从文本字段使用.im解析。所以输入是字符串。所以我将类型设置为字符串…好的,这更有意义。在这种情况下,我建议使用上面建议的
Map
switch
选项。在这种情况下,我建议使用上面建议的
Map
switch
选项。