什么是通用方法,在这种情况下<T>如何绑定?

Bar*_*man 5 java generics

前言: 我理解泛型以及它们是如何在类级别声明的(例如class MyClass<T>),但我从未在静态方法的层次上声明它,并且没有任何明确的绑定(例如class MySubclass<String> extends MyClass).

我在我正在处理的应用程序中找到了这段代码片段(我没有写这部分).我从未见过以这种方式声明的方法.<T>不是在类中定义的其他地方.Intent.getExtras().get()返回Object实际上可能是一个String,Boolean...等等.

private static <T> T getItemExtra(final Intent intent, final String extraName) {
    T item = null;

    if(intent != null && intent.getExtras() != null) {
        item = (T) intent.getExtras().get(extraName);
    }

    return item;
}
Run Code Online (Sandbox Code Playgroud)

样品用法:

String s1 = getItemExtra(someIntent, "some_string_extra");
Uri u1 = getItemExtra(someIntent, "some_uri_extra");
Run Code Online (Sandbox Code Playgroud)

JVM如何知道要使用的类型<T>?(是的,此方法编译并成功执行).

phx*_*wke 1

这就是 Java 中所谓的泛型方法。中的 T 代表您通常会指定的类型。然后,编译器会将 T 的任何实例替换为您替换它的类型。如果不这样做,编译器将尝试从可用信息中推断出正确的类型。

您应该查看 Java泛型教程以获得更深入的解释。