2

Possible Duplicate:
get type of a generic parameter in java with reflection
How to get generic’s class

How can i get class of Generic parameter.

 public <T extends BeanProxiable> void method(){
    Class claz = T.class
 }

It's wrong. Why? How to solve this problem?

Community
  • 1
  • 1
Eduard Grinchenko
  • 514
  • 1
  • 6
  • 28

2 Answers2

2

You can't.

T's type is only known at compile time.

Once the program starts to run, T's type will be Object.

This is how generics work in Java.

jahroy
  • 22,322
  • 9
  • 59
  • 108
1

You can provide the type dynamically, however the compiler doesn't do this for you automagically.

public abstract class LastActionHero<H extends Hero>(){
    protected final Class<H> hClass;
    protected LastActionHero(Class<H> hClass) {
        this.hClass = hClass;
    }
    // use hClass how you like.
}

BTW: It not impossible to get this dynamically, but it depends on how it is used. e.g

public class Arnie extends LastActionHero<MuscleHero> { }

It is possible to determine that Arnie.class has a super class with a Generic parameter of MuscleHero.

public class Arnie<H extend Hero> extends LastActionHero<H> { }

The generic parameter of the super class will be just H in this case.

Eduard Grinchenko
  • 514
  • 1
  • 6
  • 28