I have a usecase of supporting multiple datatypes for same variable. So tried to use Generics. For example
class Test<T> { T defaultValue; String value; } class TestImpl { private void test(String datatype ){ Test<?> test = null; if (datatype.equals("Integer")) { test = new Test<Integer>(); test.setDefaultValue(3); // I get some issues while doing this statement } if (datatype.equals("String")) { test = new Test<String>(); test.setDefaultValue("dummy"); } // some other actions common for all possible data types } }
The above code does not work. Can anyone please suggest a good way of doing it?
Advertisement
Answer
I changed the class names.
class SOQ<T> { T defaultValue; String value; } class SOQ_Impl { private void test(String datatype) { switch (datatype) { case "Integer": { SOQ<Integer> test = new SOQ<>(); test.defaultValue = 3; actionsCommonForAllPossibleDataTypes(test); break; } case "String": { SOQ<String> test = new SOQ<>(); test.defaultValue = "dummy"; actionsCommonForAllPossibleDataTypes(test); break; } } } private void actionsCommonForAllPossibleDataTypes(SOQ<?> test) { // some other actions common for all possible data types } }
You declared the type with a <?>
parameter, and that is what is causing you problems. I resolved this by not declaring the variable I was going to use until after I knew what type I wanted it to be.