如何从Class <t>方法参数中获取实际的类类型

时间:2016-10-20 11:11:27

标签: java spring generics

我试图从method参数中获取实例或类名,如下所示:

public class Test {

   public void getData (Class<T> type){
     // Class type of instance of "type" method argument.
      if(type instanceOf SomeClass) {
        //Do something
      }
   }
}

我已经尝试了像getClass(),getSimpleClassName(),getName()等这样的reflation方法。这些方法都将类名返回为“Class”,实例返回“class java.lang.Class”。我需要它来将实例与某些类进行比较并进行必要的操作。

3 个答案:

答案 0 :(得分:2)

您可以type == SomeClass.class,但我发现您的代码有些

我愿意:

  1. 使用抽象Abstract<T>方法介绍通用接口public void getData()
  2. 例如:

    public interface Abstract<T> {
        public void getData();
    }
    
    1. 对于T的每个有效类型参数(随意限制它有一些限制),我会创建一个子类,其中getData()方法的实现将只是代码中相应if块的行为:
    2. 例如:

      public class SomeClassSpecific implements Abstract<SomeClass> {
          public void getData() {
              //specific implementation for SomeClass. 
          }
      }
      

      这样你最终会得到一些小的,易于测试和干净的类,其实现将涵盖if-else方法的整个getData(Class<T> clazz)主体。

答案 1 :(得分:1)

如果类型应该完全相同(等于String.class和String.class,则可以使用==或equals)

public class Test {

   public void getData (Class<T> type){
     // Class type of instance of "type" method argument.
      if(type.equals(SomeClass.class) {
        //Do something
      }
   }
}

如果类型通过继承相关,例如CharSequence.class和String.class,则可以使用assignableFrom

public class Test {

   public void getData (Class<T> type){
     // Class type of instance of "type" method argument.
      if(SomeClass.class.isAssignableFrom(type) {
        //Do something
      }
   }
}

答案 2 :(得分:-2)

您只需使用typeof函数。

Type t=typeof(T);

谢谢。