#java #generics
Вопрос:
У меня есть возможность поддерживать несколько типов данных для одной и той же переменной. Поэтому попробовал использовать дженерики. Например
class Testlt;Tgt; { T defaultValue; String value; } class TestImpl { private void test(String datatype ){ Testlt;?gt; test = null; if (datatype.equals("Integer")) { test = new Testlt;Integergt;(); test.setDefaultValue(3); // I get some issues while doing this statement } if (datatype.equals("String")) { test = new Testlt;Stringgt;(); test.setDefaultValue("dummy"); } // some other actions common for all possible data types } }
Приведенный выше код не работает. Может ли кто-нибудь, пожалуйста, предложить хороший способ сделать это?
Комментарии:
1. в соответствии с этим контекстом вам нужна фабрика, которая возвращает объект, а затем передает его в ваш клиент. или добавьте больше контекста
2. @bananas , не могли бы вы предоставить небольшой фрагмент кода этого подхода ?
Ответ №1:
Я изменил названия классов.
class SOQlt;Tgt; { T defaultValue; String value; } class SOQ_Impl { private void test(String datatype) { switch (datatype) { case "Integer": { SOQlt;Integergt; test = new SOQlt;gt;(); test.defaultValue = 3; actionsCommonForAllPossibleDataTypes(test); break; } case "String": { SOQlt;Stringgt; test = new SOQlt;gt;(); test.defaultValue = "dummy"; actionsCommonForAllPossibleDataTypes(test); break; } } } private void actionsCommonForAllPossibleDataTypes(SOQlt;?gt; test) { // some other actions common for all possible data types } }
Вы объявили тип с lt;?gt;
параметром, и именно это вызывает у вас проблемы. Я решил эту проблему, не объявляя переменную, которую я собирался использовать, до тех пор, пока не узнаю, какого типа я хочу, чтобы она была.