這個問題在這里已經有了答案: Class<T> 類的泛型性質是什么意思?什么是T? (4 個回答) 昨天關閉。
當我遇到這個方法宣告時,我正在深入研究一些基礎設施代碼:
<T> T resolve(Class<T> var1);
這是某種模式或技術嗎?如果是這樣,它的目的是什么?
編輯:我了解泛型等。我更想知道在什么情況下這種形式的方法(獲取一個類并回傳它的一個實體)會有用?
這里有更多的背景關系,以防萬一它有幫助:
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());
}
uj5u.com熱心網友回復:
<T> T resolve(Class<T> var1);
<T>宣告一個正式的型別變數。因此該方法回傳 T 型別的東西。
Class<T>是 T 的類,因此它需要一個型別為“T 類的類”的引數。您有時會在 Java 中看到這一點,因為泛型型別的擦除使得必須指定實際的類。
這是 Java 標準庫中的一個實際示例。
public static <E> List<E> checkedList?(List<E> list, Class<E> type)
使用是這樣的
List<String> myList2 = Collections.checkedList(myList1, String.class);
例如new T(),由于型別擦除,泛型方法的主體不能呼叫。給定類物件,它可以獲得特定類的建構式,從而分配 T 的實體。
uj5u.com熱心網友回復:
它獲取某種型別的物件。
<T>是泛型。泛型是型別的通配符。這意味著在方法的背景關系中,T是一種型別(如類或介面)。
泛型是在呼叫方法時推斷出來的,但請注意泛型僅在編譯時檢查,而不是在運行時檢查。
方法簽名也宣告T為回傳型別。這意味著該方法應回傳通配符(通用)型別的物件。
Class是表示型別的物件。任何型別都有一個相應的Class-object ,可以通過YourType.class或獲得objectFromType.getClass()。
Class<T>意味著你有一個-type的Class物件T。這是必需的,因為方法無法知道泛型的真實型別(Java 的這種限制稱為型別擦除)。
<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
編輯:我了解泛型等。我更想知道在什么情況下這種形式的方法(獲取一個類并回傳它的一個實體)會有用?
如前所述,實際型別的資訊T在運行時被擦除。如果該方法需要泛型的實際型別,則需要一個Class-object。
在只知道類的情況下回傳類的實體可能在不同的場景中很有用,例如對于依賴注入。對于實際用例,您需要深入了解代碼(使用、檔案和實作resolve)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/401313.html
