java - Assign any type to a variable -


i have 2 objects different types:

observablelistview listview; observablegridview gridview; 

is possible make variable assign 1 of objects based on condition. , after call methods? generic types? sorry if has been asked, don't know how called technique.

edit: i'm trying avoid code duplication:

if (phone) {         listview = (observablelistview) getactivity().findviewbyid(r.id.castdetailscredits);         if (listview != null) {             listview.setonitemclicklistener(this);             listview.setscrollviewcallbacks(activity.getcastdetailsfragment());             listview.settouchinterceptionviewgroup((viewgroup) activity.getcastdetailsfragment().getview().findviewbyid(r.id.containerlayout));             bundle save = activity.getcastdetailscreditsbundle();             if (save != null) {                 movieslist = save.getparcelablearraylist("movieslist");                 movieadapter = new movieadapter(getactivity(), r.layout.row, this.movieslist);                 listview.setadapter(movieadapter);             }          }     } else {         gridview = (observablegridview) getactivity().findviewbyid(r.id.castdetailscredits);         if (gridview != null) {             gridview.setonitemclicklistener(this);             gridview.setscrollviewcallbacks(activity.getcastdetailsfragment());             gridview.settouchinterceptionviewgroup((viewgroup) activity.getcastdetailsfragment().getview().findviewbyid(r.id.containerlayout));             bundle save = activity.getcastdetailscreditsbundle();             if (save != null) {                 movieslist = save.getparcelablearraylist("movieslist");                 movieadapter = new movieadapter(getactivity(), r.layout.row, this.movieslist);                 gridview.setadapter(movieadapter);             }          }     } 

there's couple of ways actually:

reflection:

//i don't know object i'm using default constructor observablelistview listview = new observablelistview();  observablegridview gridview = new observablegridview();  object obj;  if(condition) {     obj = listview; } else {     obj = gridview; }  method method = obj.getclass().getmethod("methodname", param1.getclass(), param2.getclass()); try {     method.invoke(obj, param1, param2); }catch(exception e){} 

inheritance:

//assuming there parent class of both classes contains methods use observablelistview listview = new observablelistview();  observablegridview gridview = new observablegridview();  observableview view;  if(condition) {     view = listview; } else {     view = gridview; }  view.somemethod(); 

interface:

//this assumes both observablelistview , observablegridview implement interface 'iobservableview' observablelistview listview = new observablelistview();  observablegridview gridview = new observablegridview();  iobservableview view;  if(condition) {     view = listview; } else {     view = gridview; }  view.somemethod(); 

instanceof:

//very flexible version. think route choose observablelistview listview = new observablelistview();  observablegridview gridview = new observablegridview();  object obj;  if(condition) {     obj = listview; } else {     obj = gridview; }  if(obj instanceof observablelistview) {     ((observablelistview)obj).somemethodonlyinthisclass(); } else if(obj instanceof observablegridview) {     ((observablegridview)obj).someothermethodonlyinthisclass(); } 

i avoid using reflection.

inheritance works if method want use in both classes , inherited super class.

interfaces work if super class doesn't have same method both child classes implement interface.

instanceof flexible solution doesn't use reflection though down upon use.


since updated answer more clear objective. here's do.

adapterview view = (adapterview) getactivity().findviewbyid(r.id.castdetailscredits);  if(view != null) {     view.setonitemclicklistener(this);     ((scrollable)view).setscrollviewcallbacks(activity.getcastdetailsfragment());     ((scrollable)view).settouchinterceptionviewgroup((viewgroup) activity.getcastdetailsfragment().getview().findviewbyid(r.id.containerlayout));     bundle save = activity.getcastdetailscreditsbundle();      if (save != null) {         movieslist = save.getparcelablearraylist("movieslist");         movieadapter = new movieadapter(getactivity(), r.layout.row, this.movieslist);         view.setadapter(movieadapter);     } } 

we use couple of techniques here mentioned above. inheritance (adapterview) , interface (scrollable).


Comments

Popular posts from this blog

powershell Start-Process exit code -1073741502 when used with Credential from a windows service environment -

twig - Using Twigbridge in a Laravel 5.1 Package -

c# - LINQ join Entities from HashSet's, Join vs Dictionary vs HashSet performance -