java - Instantiate Parameterized Type class with Class<?> variable -


(note: have searched multiple questions on in similar domain, never encountered answer specific idea).

consider if have class or enum foo each instance has class<?> type field:

public enum foo {     (integer.class), b (double.class), c (string.class);      public final class<?> type;      foo(class<?> type) {         this.type = type;     } } 

then have generic class bar<v>:

public class bar<v> {      private v value;      // default constructor     public bar() {}      // getter     public v getvalue(){         return value;     }      // setter     public void setvalue(v value){         this.value = value;     } } 

is possible instantiate instance of bar type class<?> type field of given foo without knowing specific type of foo.type? instance, call in either static method, or kind of factory method.

edit:

to specify function of bar: bar wraps around value simple getter/setter, , has consistent interface, unknown type. benefit of idea create instances of bar based off of instance of foo. instance, use value of foo.a.type (which integer.class) instantiate bar<integer> without knowing ahead of time foo.a.type has value of integer.class.

given constructor in bar class, in order instantiate new bar<v> object, need object of type v.

so, problem translates instantiating object of type class<v>. more specifically, assuming existing foo object , gettype() method in foo class, like:

foo foo = ... // existing foo object class<v> type = foo.gettype(); v value = instantiate(type); // todo: implement instatiate() bar<v> bar = new bar(value); 

the trick implementation of instantiate() method. if class<v> has no-args constructor, can call

v value = type.newinstance(); 

not classes have default constructor, though, there no generic solution cases.


Comments

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -