First time developing in Java, and first time developing for Android, so it’s quite a newbie question.
I currently have this code:
public void onBtnClicked(View v){
/** Handles button navigation */
@SuppressWarnings("rawtypes")
Class c;
int viewId = v.getId();
switch (viewId) {
case R.id.btnNewTourny :
c = NewTourny.class;
break;
case R.id.btnTeamEditor :
c = EditTeam.class;
break;
case R.id.btnCatEditor :
c = EditCat.class;
break;
case R.id.btnLoadTourny :
c = EditCat.class;
break;
case R.id.btnNewCategory :
c = NewCat.class;
break;
default :
c = Main.class;
}
Intent myIntent = new Intent(v.getContext(), c);
startActivityForResult(myIntent, 0);
}
Short question:
What does the .class property do, f.ex. in ‘c = NewTourny.class‘?
Why can’t I cast c as Tourny (which is the parent of all these classes)?
Long question:
This currently handles all button navigations throughout my app, and works fine. However, as you can see, I’ve suppressed a ‘rawtype’ warning, that comes when I cast c as a Class .
Now, I really want a code without warnings, so I thought ‘well, all these classes are a child of ‘Tourny”, so I thought it would work, casting c as Tourny – but that does not work. Then I realised, that I didn’t really know what the code “NewTourny.class” actually did, and that may be the clue to why I couldn’t cast c as Tourny. So, what does .class do?
It doesn’t really do much.
NewTourney.classis more of a language specific way to write “the object which is the Class ofNewTourney“. This shorthand allows one to refer to the class of aNewTourney, as opposed to dealing with specific already existing instances ofNewTourney.In your specific case, I would hazard to guess that the
Activityeventually creates an instance of the class to handle the action, or at least to hold the action’s context sensitive data.