Динамическое приведение: класс и строка для сравнения

Поиск квадратного корня из числа для эффективности. например. если я пытаюсь найти коэффициенты 36, то наибольшее число, которое может быть умножено на себя на форму 36, равно 6. 7 * 7 = 49.

, поэтому каждый коэффициент 36 приходится умножать на 6 или меньшее число.

1
задан mepcotterell 17 September 2012 в 19:41
поделиться

2 ответа

​​

Мне действительно не нравится то, что вы пытаетесь сделать, но вот моя модификация вашего кода, так что он компилируется и запускается:

Class [] domains = { Integer.class, Double.class, String.class };
String [] stringValues = { "12", "31.4", "dog" };
Comparable [] comparableObjects = { null, null, null };

for (int i = 0; i < domains.length; i++) {
    Constructor con = domains[i].getConstructor(String.class);
    comparableObjects[i] = (Comparable) con.newInstance(stringValues[i]);
    System.out.println(comparableObjects[i]);
}

Печать:

12
31.4
dog

Хотя это может помочь если вы объясните словами, чего пытаетесь достичь, то, возможно, вы получите больше помощи, сделав это лучше.

1
ответ дан 2 September 2019 в 23:26
поделиться

Вам придется вызывать метод valueOf каждого из этих классов. Так, возможно:

for (int i = 0; i < domains.length; i++) {
    try {
        comparableObjects[i] = (Comparable) domains[i]
               .getMethod("valueOf", String.class).invoke(null, stringValues[i]);
    } catch (NoSuchMethodException ex) {
        comparableObjects[i] = stringValues[i];
    }
}

Этот код берет метод valueOf путем отражения. getMethod(...) принимает имя метода и тип(ы) аргументов, а invoke(...) принимает null в качестве первого аргумента, поскольку метод статический.

Если есть другие классы, которые вы хотите преобразовать из String, вам придется использовать их методы конвертера.

Но я не знаю, нужно ли вам это на самом деле и зачем. Поскольку вы знаете все классы и аргументы.

1
ответ дан 2 September 2019 в 23:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: