从用户输入的Java字符串设置变量名

从用户输入的Java字符串设置变量名,java,arrays,string,Java,Arrays,String,所以我在互联网上搜索了一个补丁,我得到了使用地图、反射方法和其他很多东西的技巧,但是没有任何东西能按我想要的方式工作 我的目标是这样做: 我把一个字符串分成一个数组。示例:“设定值强度3” lineArray[0]=setVal 线性阵列[1]=强度 线性阵列[2]=3 我想使用lineArray[1]并在它的开头添加“Feats.”,这样就可以使用类似“Feats.strength”(我可以使用字符串变量)的内容 然后我想将该变量(Feats.strength,它是Feats类中称为stren

所以我在互联网上搜索了一个补丁,我得到了使用地图、反射方法和其他很多东西的技巧,但是没有任何东西能按我想要的方式工作

我的目标是这样做:

我把一个字符串分成一个数组。示例:“设定值强度3”

lineArray[0]=setVal

线性阵列[1]=强度

线性阵列[2]=3

我想使用lineArray[1]并在它的开头添加“Feats.”,这样就可以使用类似“Feats.strength”(我可以使用字符串变量)的内容

然后我想将该变量(Feats.strength,它是Feats类中称为strength的双精度)设置为lineArray[2](这是双精度)


这有什么意义吗?提前谢谢你的帮助

也许像这样的办法行得通

// Application.java
public class Application {

    public static void main(String[] args){
        String field = "setVal strength 3";
        Feats.resolveValue(field);

        String field2 = "getVal strength";
        Integer value = Feats.resolveValue(field2);

        String field3 = "clearAll";
        Feats.resolveValue(field3);
    }
}
--


所以我解决了。感谢@shmosel告诉我使用字段

long temp = Long.parseLong(lineArray[2]);

try {
Feats.class.getField(lineArray[1]).set(lineArray[1], temp);;
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e1) {
e1.printStackTrace();
}

你需要使用反射。最好将属性保留在映射中。“但你已经知道了,”肖姆塞尔说,“我该怎么办呢?我已经尝试了我能想到的一切。你有指针吗?我刚给了你指针。如果您尝试过某项操作,请展示您尝试过的内容,并解释您遇到的问题。我将名称存储在地图中,但我不知道如何获取存储的名称并将该变量设置为lineArray[2]可能的重复项
// Feats.java
public class Feats {

    private static final Logger LOGGER = LoggerFactory.getLogger(Feats.class);
    private static final Map<String, Integer> ATTRIBUTES = new HashMap<>();

    public static String resolveString(String fieldInput){

         String response = null;
         String[] values = fieldInput.split(" ");
         Action action; 

         try {
             action = Action.valueOf(values[0].trim().toUppercase());

         } catch(Exception e){
             LOGGER.error("Not a valid Action in input: " + fieldInput);
             return response;
         }
         switch(action){
             case SETVALUE:
                setValue(values[1].trim(), values[2].trim());
                break;

             case CLEARALL:
                clearAll();
                break;

             case GETVALUE:
                response = getValue(values[1].trim());
                break;

             default:
                assert true;
         }

         return response;
    }

    private static void setValue(String attrName, String attrValue){
        ATTRIBUTES.put(attrName, attrValue);
    }

    private static String getValue(String attrName){
         return ATTRIBUTES.get(attrName);
    }

    private static void clearAll(){
        ATTRIBUTES.clear();
    }
}
// Action.java
public enum Action {
    SETVALUE, CLEARALL, GETVALUE
}
long temp = Long.parseLong(lineArray[2]);

try {
Feats.class.getField(lineArray[1]).set(lineArray[1], temp);;
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e1) {
e1.printStackTrace();
}