泛化数组类型,如Object [] .class

s.a*_*lem 5 java generics

我想尝试下面的课程:

public class FooService {

  private Client client;

  public Foo get(Long id) {
    return client.get(id, Foo.class);
  }

  public List<Foo> query() {
    return Arrays.asList(client.get(Foo[].class));
  }

}
Run Code Online (Sandbox Code Playgroud)

一切都没问题,除了Foo[].class:

public abstract class BaseService<T, I> {

  private Client client;
  private Class<T> type;

  public BaseService(Class<T> type) {
    this.type = type;
  }

  public T get(I id) {
    return client.get(id, type);
  }

  public List<T> query() {
    return Arrays.asList(client.get(/* What to pass here? */));
  }
Run Code Online (Sandbox Code Playgroud)

如何Foo[].class在不传递构造函数的情况下解决此问题,就像我一样Foo.class

das*_*ght 4

Java 缺乏直接从元素类获取数组类的工具。常见的解决方法是从零长度数组中获取类:

private Class<T> type;
private Class arrType;

public BaseService(Class<T> type) {
    this.type = type;
    arrType = Array.newInstance(type, 0).getClass();
}
Run Code Online (Sandbox Code Playgroud)

您现在可以传递arrType给该client.get(...)方法。