LongInt LongInt - 1 year ago 72
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 */

@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?

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.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download