#java
Вопрос:
Я немного сбит с толку тем, как все это должно работать. Я пытаюсь создать объект, который может иметь неограниченное количество полей, имеющих разные/динамические типы (поэтому я заранее не знаю, какие они типы).
У меня первый класс ConditionParamField<T>
, и я думаю, что этот вроде как в порядке. Он представляет ключ:значение, которое будет сохранено в файле
public class ConditionParamField<T> {
private final String name;
private final T value;
public ConditionParamField(String name, T value) {
this.name = name;
this.value = value;
}
public String getName() {
return name;
}
public T getValue() {
return value;
}
}
Тогда у меня ConditionRule
есть . Он вытягивается Rule
из упаковки jeasy. Основная идея состоит в том, чтобы просто иметь карту ключа:тип, который будет указывать, какие ключи необходимы и каким должен быть их тип. Моя идея заключалась бы в том, что <?>
здесь будет заполнено, где T
находится в классе до ( ConditionParamField<T>
)
public interface ConditionRule extends Rule {
/**
* Request values that need to be filled in by the user
*/
HashMap<String, Class<?>> getNeededValues();
}
Эти 2 объединяются в простом классе менеджеров. Моя идея заключалась бы в том, чтобы отобразить необходимые поля и создать свои ConditionParamField
экземпляры:
ArrayList<ConditionParamField<?>> conditionParamFields = new ArrayList<>();
HashMap<String, Class<?>> neededValues = conditionRule.getNeededValues();
for (String field : neededValues.keySet()) {
Class<?> clazz = neededValues.get(field).getClass();
ConditionParamField<clazz> conditionParamField = new ConditionParamField<>(field, null);
}
Очевидно, я делаю что-то не так, но я не знаю, что именно. Я не очень хорошо знаком с дженериками или как там это <?> называется.
Я надеюсь, вы понимаете, чего я пытаюсь достичь.
Основная проблема здесь в том, что я получаю ошибку «Класс неизвестен» для ConditionParamField<clazz>
. Похоже, он не принимает переменную, или, может быть, это вообще невозможно сделать, я не уверен.
Моей конечной основной целью будет показать пользователю ввод, который будет принимать только тот тип поля, который был (целое число, строка,…)
Комментарии:
1. Не могли бы вы уточнить, о чем вы здесь спрашиваете? В чем проблема?
2. Я получаю ошибку «Неизвестный класс clazz» из моей среды разработки для
ConditionParamField<clazz>
3. Вы не можете использовать переменную / значение в качестве параметра универсального типа. Синтаксис Java требует наличия типа в этой точке … ни одного примера
Class
.4. @StephenC Я понял, что да, но какое тогда может быть решение здесь?
5. Измените
ConditionParamField<clazz>
наConditionParamField<?>
… Я думаю. Для уверенности недостаточно контекста (кода).