<T> T resolve(Class<T> var1); 是什么意思?做?

What does <T> T resolve(Class<T> var1); do?

当我遇到这个方法声明时,我正在深入研究一些基础设施代码:

<T> T resolve(Class<T> var1);

这是某种模式或技术吗?如果有,它的用途是什么?

编辑: 我了解泛型等。我更想知道在什么情况下会采用这种形式的方法(采用 Class 并返回一个实例它)有用吗?

以下是更多上下文,希望对您有所帮助:

public interface Environment {
  String domain();

  Client client();

  Config config();

  Environment.RoutingEngine routingEngine();

  Closer closer();

  <T> T resolve(Class<T> var1);

  public interface RoutingEngine {
    Environment.RoutingEngine registerAutoRoutes(RouteProvider var1);

    Environment.RoutingEngine registerAutoRoute(Route<? extends AsyncHandler<?>> var1);

    Environment.RoutingEngine registerRoutes(Stream<? extends Route<? extends AsyncHandler<? extends Response<ByteString>>>> var1);

    Environment.RoutingEngine registerRoute(Route<? extends AsyncHandler<? extends Response<ByteString>>> var1);
  }
}

还有一个使用示例,尽管我怀疑它是否有帮助:

  static void configure(final Environment environment) {
    final GrpcServer grpcServer = environment.resolve(GrpcServer.class);
    grpcServer.addService(new ExampleResource());
  }
<T> T resolve(Class<T> var1);

<T> 声明了一个正式的类型变量。所以方法 returns 类型为 T.

Class<T>是T的class,所以它需要一个'the Class that is the class of T'类型的参数。您有时会在 Java 中看到这一点,因为通用类型的擦除使得有必要指定实际的 class.

Here 是 Java 标准库中的实际示例。

public static <E> List<E> checkedList​(List<E> list, Class<E> type)

使用是这样的

List<String> myList2 = Collections.checkedList(myList1, String.class);

例如,由于类型擦除,泛型方法的主体无法调用 new T()。给定 class 对象,它可以获得特定 class 的构造函数,从而分配 T.

的实例

获取特定类型的对象。

<T> 是泛型。泛型是类型的通配符。这意味着在方法的上下文中,T 是一种类型(如 class 或接口)。

泛型是在调用方法时推断出来的,但请注意泛型仅在编译时检查,而不是在运行时检查。

方法签名还将 T 声明为 return 类型。这意味着该方法应该 return 通配符(通用)类型的对象。

Class 是表示类型的对象。任何类型都有对应的 Class-对象,可以通过 YourType.classobjectFromType.getClass().

获得

Class<T> 表示您有一个 Class 类型的 T 对象。这是必需的,因为方法无法知道泛型的真实类型(Java 的这种限制称为 type erasure)。

<T> T resolve(Class<T> var1);
 ^  ^         ^
 |  |         |- object declaring the type at runtime so the method knows the actual type
 |  |- return type (it returns an object of the generic) 
 |- generic (wildcard type) declaration

Edit: I understand generics, etc. I'm more wondering in what case would a method of that form (taking a Class and returning an instance of it) be useful?

如前所述,T 的实际类型信息在运行时被删除。如果该方法需要泛型的实际类型,它需要一个 Class-object.

在只知道 class 时返回 class 的实例可能在不同的场景中很有用,例如依赖注入。对于实际用例,您需要更深入地研究代码(resolve 的用法、文档和实现)。