Java:instanceof Generic

som*_*guy 33 java generics instanceof

有没有办法找到泛型的类型?

if (T instanceof String) {
    // do something...
}
Run Code Online (Sandbox Code Playgroud)

以上绝对不会编译.

Pet*_*rey 47

泛型是一个编译时功能.泛型在编译时添加检查,这在运行时可能没有任何意义.这是一个例子.您只能检查引用的对象的类型,这可能是代码中的超类型.如果要传递类型T,则必须明确地执行此操作.

void someMethod(Class<T> tClass) {
    if(String.class.isAssignableFrom(tClass)) 
Run Code Online (Sandbox Code Playgroud)

要么

void someMethod(Class<T> tClass, T tArg) {
Run Code Online (Sandbox Code Playgroud)

注意:类型可能不一样,

someMethod(Number.class, 1);
Run Code Online (Sandbox Code Playgroud)

  • 这是那些只为我立刻钉出一堆东西的答案之一. (2认同)

dre*_*kka 5

它不会编译,因为 T 不是变量,而是在运行时定义的类的占位符。这是一个快速示例:

public class Test<T> {

public void something(T arg) {
    if (arg instanceof String) {
        System.out.println("Woot!");
    }
}

public static void main(String[] args) {
    Test<String> t = new Test<String>();
    t.something("Hello");
}

}
Run Code Online (Sandbox Code Playgroud)

  • 这将起作用,因为您正在使用 `instanceof` 来测试已知类型,而不是泛型。不起作用的是说 `if (foo instanceof T)`,其中 `foo` 是某个变量,因为 `T` 表示的类型在编译时是未知的。 (2认同)