(Java)获取加载到动态类型对象中的字符串的值?

时间:2012-06-04 04:12:54

标签: java string

我是Java的新手(大约10天),所以我的代码可能非常糟糕,但这就是我所拥有的:

ArgsDataHolder argsData = new ArgsDataHolder();  // a class that holds two
                                                 // ArrayList's where each element
                                                 // representing key/value args
Class thisArgClass;
String thisArgString;
Object thisArg;

for(int i=2; i< argsString.length; i++) {
    thisToken = argsString[i];
    thisArgClassString = getClassStringFromToken(thisToken).toLowerCase();
    System.out.println("thisArgClassString: " + thisArgClassString);
    thisArgClass = getClassFromClassString(thisArgClassString);

    // find closing tag; concatenate middle
    Integer j = new Integer(i+1);
    thisArgString = getArgValue(argsString, j, "</" + thisArgClassString + ">");

    thisArg = thisArgClass.newInstance();
    thisArg = thisArgClass.valueOf(thisArgString);
    argsData.append(thisArg, thisArgClass);
}

用户基本上必须以这种格式在命令提示符中输入一组键/值参数:<class>value</class>,例如<int>62</int>。使用此示例,thisArgClass将等于Integer.classthisArgString将是一个读取“62”的字符串,而thisArg将是一个等于62。

我尝试thisArg.valueOf(thisArgString),但我猜valueOf(<String>)只是Object的某些子类的方法。无论出于何种原因,我似乎无法将thisArg强制转换为thisArgClass(如此:thisArg = (thisArgClass)thisArgClass.newInstance();,此时valueOf(<String>)应该可以访问。

必须有一个漂亮,干净的方式来做到这一点,但在这一点上超出了我的能力。如何获取加载到动态类型对象(Integer,Long,Float,Double,String,Character,Boolean等)中的字符串的值?或者我只是想过这个,Java会为我做转换吗? :困惑:

2 个答案:

答案 0 :(得分:1)

  

我似乎无法将thisArg强制转换为thisArgClass(如此:thisArg =(thisArgClass)thisArgClass.newInstance();,

这不会像这样工作,因为您需要首先初始化thisArgClass。这将产生编译时错误。更改代码如下:

Class thisArgClass = null;
try {
    Object thisArg = thisArgClass.newInstance();
} catch (InstantiationException ex) {
    Logger.getLogger(Test3.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
    Logger.getLogger(Test3.class.getName()).log(Level.SEVERE, null, ex);
}

希望这会对你有所帮助。

答案 1 :(得分:1)

这里有几个问题。我假设thisArgClass已正确设置;对于您的示例,它将包含Integer.class。为了在newInstance()对象上调用Class,类必须具有无参数构造函数。类Integer没有这样的构造函数,因此您必须使用更多的roundabout方法调用其中一个现有构造函数:

Constructor<Object> c = thisArgClass.getConstructor(String.class);
Object i = c.newInstance(thisArgString);

由于在运行之前您不知道对象的实际类型,因此必须使用<Object>并在使用该值之前将结果转换为所需类型。