public class A {
public interface I<T> {
public Integer toInt(T x);
}
public static int t(String s, I<String> i) {
// System.out.println(i instanceof I<Integer>);
return i.toInt(s);
}
public static <S> int g(S s, I<T> i){
return i.toInt(s);
}
public static void main (String[] args) {
System.out.println(t("dcba", s->(int)(s.charAt(0)+'a')));
}
}
为什么该方法g
编译失败?为什么行 System.out.println(i instanceof I<Integer>)
在方法t
中编译失败?
最佳答案
g
无法使用泛型类型参数 T
在其签名中,因为该参数仅为接口(interface) I
声明。 .
您可能应该将其签名更改为:
public static <S> int g(S s, I<S> i)
i instanceof I<Integer>
未通过编译,因为泛型类型信息在编译期间被删除,因此在运行时不可用。
这正是编译器告诉您的内容:
Cannot perform instanceof check against parameterized type
A.I<Integer>
. Use the formA.I<?>
instead since further generic type information will be erased at runtime
关于java - instanceof 和泛型的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38967742/