Обнаружение типов объектов в проблеме Java - PullRequest
0 голосов
/ 20 мая 2011

Я нахожусь в процессе создания приложения, но наткнулся на проблему.

Я создаю программу, которая будет генерировать файл .java в зависимости от ввода пользователя.В программе вы сможете выбрать пользовательские интерфейсы API (хотя не могу предоставить их вам).После того, как вы выбрали вызов API, вам необходимо указать входные данные для этого метода.Вы также можете указать другой вызов API в качестве входных данных для текущего параметра.Я только хочу показать вызовы API, которые обеспечивают правильное возвращаемое значение в качестве входных данных для выбранного вызова API.Здесь проблема.Я могу определить тип ввода для параметров выбранных вызовов API, но я не могу определить тип для параметра classValue, предоставленного для listAPICallsWithReturnValue (...).функция 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 ]

2 голосов
/ 20 мая 2011

возможно:

classValue.getName()

classValue.getClass().getName() вернет "Class" (так как classValue имеет тип Class).

1 голос
/ 20 мая 2011

Я предлагаю просто распечатать getCanonicalName (), и вы увидите, что он не будет соответствовать toString (). Фактически, getName будет совпадать, если не очень близко, возможно, оно не добавит слово «Class» и т. Д.

Возможно, используйте class.getName для обоих сравнений или дважды проверьте, что еще доступно для вас ....

0 голосов
/ 20 мая 2011

попробуйте использовать 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);
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...