LongInt LongInt - 1 year ago 61
Java Question

How does a '.class' property work?

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 */

Class c;
int viewId = v.getId();

switch (viewId) {

case R.id.btnNewTourny :
c = NewTourny.class;
case R.id.btnTeamEditor :
c = EditTeam.class;
case R.id.btnCatEditor :
c = EditCat.class;
case R.id.btnLoadTourny :
c = EditCat.class;
case R.id.btnNewCategory :
c = NewCat.class;
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?

Answer Source

It doesn't really do much. NewTourney.class is more of a language specific way to write "the object which is the Class of NewTourney". This shorthand allows one to refer to the class of a NewTourney, as opposed to dealing with specific already existing instances of NewTourney.

In your specific case, I would hazard to guess that the Activity eventually creates an instance of the class to handle the action, or at least to hold the action's context sensitive data.