Как определить класс Java Generic динамически - PullRequest
0 голосов
/ 30 августа 2018

Если я определю метод, который возвращает универсальный класс, как я могу это сделать, чем динамически определить тип универсального класса? например

  try {
        Class c =Class.forName(keytype);
        Class d= Class.forName(valuetype);
        KafkaConsumer<c,d> consumerconsumer = new KafkaConsumer<c,d>(PropertiesUtil.getPropsObj(configPath));
        return consumer ;
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }


}

Но код выше не в порядке. Как я могу сделать, чем я могу достичь этого?

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Вы можете иметь свой класс ключа и значения, каждый из которых реализует известный интерфейс. Затем вы можете назначить или разыграть его.

KafkaConsumer<IKeyType,IValueType> consumerconsumer = new KafkaConsumer<>(PropertiesUtil.getPropsObj(configPath));

или

KafkaConsumer<IKeyType,IValueType> consumerconsumer1 = (KafkaConsumer<IKeyType,IValueType>) new KafkaConsumer(PropertiesUtil.getPropsObj(configPath));

Читайте здесь о наложении ограничений на ваши генерики. https://docs.oracle.com/javase/tutorial/java/generics/wildcards.html

0 голосов
/ 30 августа 2018

Общий синтаксис хорош только во время компиляции. Ни один из типов в универсальном классе или методе не доступен во время выполнения. Это называется тип стирания . Таким образом, вы не можете делать то, что хотите, по крайней мере, так.

В зависимости от исходной проблемы, которую вы пытаетесь решить, вы можете вместо этого использовать групповые символы .

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