java - instanceof 和泛型的编译错误

标签 java generics java-8

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 form A.I<?> instead since further generic type information will be erased at runtime

关于java - instanceof 和泛型的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38967742/

相关文章:

java - 无法计算表达式 'IS_AUTHENTICATED_ANONYMOUSLY' Spring 4

java - 模拟 Java Web 服务的最佳方式

java - 使用JPA手动控制数据库更新

scala - 集合中通用多态数据的上下文边界

java - 如何回收 Java 中声明的 arraylist 的泛型类型?

java - 如何使用 Java 8 Stream 从 Map 列表中的字符串获取列表?

java - 打印机在服务器而不是客户端打印

java - 获取使用 iText 和 Xchart 创建的圆环图之间的线

java - 无法从有界通配符引用中引用泛型类型

java - 使用 String hashCode() 方法?