final static int
DRAGON = 5,
SNAKE = 6;
String this_item = "DRAGON";
int item_value = super_func(this_item);//must be 5
是否可以实现此super_func
,如上所示?
或许我要求的太多了?
修改
我不允许使用枚举。我可以:
a)使用地图(如某人所指,或2个数组列表)或
b)以一些亲的方式做到这一点(但似乎不可能)。
答案 0 :(得分:3)
我不知道这个值应代表什么,但您可以使用Enum。
enum Animal {
DRAGON(5),
SNAKE(6);
private final int a;
private Animal(int a){
this.a = a;
}
public int getA(){
return a;
}
}
然后
String this_item = "DRAGON";
int item_value = Animal.valueOf(this_item).getA();//5
答案 1 :(得分:2)
您可以使用 Java Reflection 技巧获取变量的值,但为什么不声明一个简单的枚举并使用它:
enum Creature{
DRAGON(5), SNAKE(6);
...
}
答案 2 :(得分:1)
据我所知,这样的事情是不可能的,但你可以将你的变量存储在Map
中HashMap<String,Integer> map = new HashMap<>();
map.put("DRAGON",5);
map.put("SNAKE",6);
int itemValue = map.get("DRAGON"); //Sets itemValue to 5
答案 3 :(得分:1)
您也可以使用switch()语句。
int item_value;
switch(this_item) {
case "DRAGON":
item_value = 5;
break;
case "SNAKE":
item_value = 6
break;
或不同的解决方案正好相反
private String getAnimal(int itemValue) {
switch(item_value) {
case 5:
return "DRAGON";
case 6:
return "SNAKE";
default:
return null;
}
答案 4 :(得分:1)
虽然技术上可以使用反射来做到这一点,但我强烈建议您重新考虑您的结构,并考虑其他方法中提到的替代方案之一答案。
最简单的可能是使用地图
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
public class VariableNameTest
{
private static final Map<String,Integer> map;
static
{
Map<String, Integer> m = new LinkedHashMap<String, Integer>();
m.put("DRAGON",5);
m.put("SNAKE",6);
map = Collections.unmodifiableMap(m);
}
public static void main(String[] args)
{
System.out.println(getValue("DRAGON"));
System.out.println(getValue("SNAKE"));
System.out.println(getValue("Boo!"));
}
public static int getValue(String name)
{
Integer i = map.get(name);
if (i == null)
{
// Do some error handling here!
}
return i;
}
}
但是如果您打算使用其他功能来扩展它,那么您应该引入类似于https://stackoverflow.com/a/23846279/3182664
中推荐的类。仅为完整性:反思解决方案,不推荐!
import java.lang.reflect.Field;
public class VariableNameTest
{
static final int DRAGON = 5;
static final int SNAKE = 6;
public static void main(String[] args)
{
System.out.println(getValue("DRAGON"));
System.out.println(getValue("SNAKE"));
System.out.println(getValue("Boo!"));
}
private static int getValue(String name)
{
try
{
Class<?> c = VariableNameTest.class;
Field f = c.getDeclaredField(name);
return f.getInt(null);
}
catch (NoSuchFieldException e)
{
// Many things
e.printStackTrace();
}
catch (SecurityException e)
{
// may cause
e.printStackTrace();
}
catch (IllegalArgumentException e)
{
// this to
e.printStackTrace();
}
catch (IllegalAccessException e)
{
// fail horribly
e.printStackTrace();
}
return 0;
}
}