我正在创建一个应用程序,但我偶然发现了一个问题。
我正在创建一个程序,根据用户输入生成.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);
}
答案 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);
}
}