检测java问题中的对象类型

时间:2011-05-20 14:54:09

标签: java object types

我正在创建一个应用程序,但我偶然发现了一个问题。

我正在创建一个程序,根据用户输入生成.java文件。 在程序中,您将能够选择自定义api(虽然不能提供给他们)。 一旦选择了API调用,就必须为该方法指定输入。您还可以指定另一个API调用作为当前参数的输入。 我只想显示提供正确返回值的api调用作为所选api调用的输入。 这是问题所在。我可以检测所选api调用的参数的输入类型,但我似乎无法检测提供给listAPICallsWithReturnValue(...)的classValue参数的类型。 call.getMethod()函数返回一个java.lang.reflect.Method对象。

我希望你们都明白我的意思...... :)。

public void displayParameterDialogs(APICall call) {
    JDialogMethodParameters dialog = new JDialogMethodParameters(mainframe, true);
    for (int i = 0; i < call.getMethod().getParameterTypes().length; i++) {
        dialog.init(i, call.getMethod().getParameterTypes()[i]);
        dialog.setVisible(true);
    }
}
//dialog class
public void init(int parameterIndex, Class parameterType) {

    this.jLabelInfo.setText("Data for input parameter: " + parameterIndex);

    DefaultComboBoxModel cmodel = new DefaultComboBoxModel();
    for (APICall call : TestFactory.getInstance().listAPICallsWithReturnValue(parameterType)) {
        cmodel.addElement(call);
    }

    this.jComboBox1.setModel(cmodel);
}
public APICall[] listAPICallsWithReturnValue(Class<?> classValue) {
    APICall[] calls;
    Vector<APICall> temp = new Vector<APICall>();
    Method[] methods = TestSuite.class.getMethods();

    for (Method method : methods) {
        System.out.println(method.getReturnType().getName());
        System.out.println(classValue.getClass().getName());
        System.out.println(classValue.toString());
        if (method.getReturnType().getCanonicalName().equals(classValue.toString())) {
            temp.add(new APICall(method));
        }
    }

    calls = new APICall[temp.size()];
    return temp.toArray(calls);

}

3 个答案:

答案 0 :(得分:2)

也许:

classValue.getName()

classValue.getClass().getName()将返回“Class”(因为classValue的类型为Class)。

答案 1 :(得分:1)

我建议只需打印出getCanonicalName(),你就会发现它与toString()不匹配。事实上,如果不是非常接近,getName将匹配,也许它不会添加单词“Class”等....

也许使用class.getName进行比较或仔细检查你还有什么可用......

答案 2 :(得分:0)

尝试将getClass()isAssignableFrom()

结合使用

示例:

public class Main {

static class A {}
static class B extends A {}

public static void main(String[] args) {
    Object a = new A();
    Object b = new B();

    boolean aAssignableFromB = a.getClass().isAssignableFrom(b.getClass()); // true
    boolean bAssignableFromA = b.getClass().isAssignableFrom(a.getClass()); // false

    System.out.println(aAssignableFromB);
    System.out.println(bAssignableFromA);
}

}