<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.class
或 objectFromType.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
的用法、文档和实现)。
当我遇到这个方法声明时,我正在深入研究一些基础设施代码:
<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.class
或 objectFromType.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
的用法、文档和实现)。