如何在java泛型中返回类对象“类型”?

arz*_*llo 5 java generics types return class

想象一下有一个java类

public class FixedClassOfStrings {

  List<String> myMember=new ArrayList<String>();

  // omissed all non relevant code...

  public Class getMyType() {
    return String.class;
  }
}
Run Code Online (Sandbox Code Playgroud)

如何通过使用 java 泛型使其参数化?

我的尝试失败了:

public class GenericClass<T> {

  List<T> myMember=new ArrayList<T>();

  public Class getMyType() {
    return T.class; // this gives "Illegal class literal for the type parameter T"
  }
}
Run Code Online (Sandbox Code Playgroud)

另外,如何避免在 FixedClassOsStrings 中发出警告:“类是原始类型。对泛型类的引用应该参数化”?可以声明:

  public Class<String> getMyType() {
    return String.class;
  }
  ...
Run Code Online (Sandbox Code Playgroud)

如果没问题,我应该使用泛型返回什么?

  public Class<T> getMyType() {
    return T.class; // this gives "Illegal class literal for the type parameter T"
  }
  ...
Run Code Online (Sandbox Code Playgroud)

所有提示将不胜感激!!!

Rog*_*gue 3

我会尝试这样的事情:

public Class<T> getMyType() {
    return /* some instance of T */.getClass();
}
Run Code Online (Sandbox Code Playgroud)

或者,一个简单的解决方案是在构造时传递实例:

public class YourClass<T> {

    private final Class<T> type;

    public YourClass (/* arguments */, Class<T> type) {
        this.type = type;
    }

    public Class<T> getType() {
        return this.type;
    }

}
Run Code Online (Sandbox Code Playgroud)