Java instanceof和泛型的编译错误 公共A类{ 公共接口I{ 公共整数toInt(tx); } 公共静态int t(字符串s,I){ //System.out.println(i的i个实例); 返回i.toInt(s); } 公共静态整数g(S S,I){ 返回i.toInt(s); } 公共静态void main(字符串[]args){ 系统输出println(t(“dcba”,s->(int)(s.charAt(0)+'a')); } }
为什么方法Java instanceof和泛型的编译错误 公共A类{ 公共接口I{ 公共整数toInt(tx); } 公共静态int t(字符串s,I){ //System.out.println(i的i个实例); 返回i.toInt(s); } 公共静态整数g(S S,I){ 返回i.toInt(s); } 公共静态void main(字符串[]args){ 系统输出println(t(“dcba”,s->(int)(s.charAt(0)+'a')); } },java,generics,java-8,Java,Generics,Java 8,为什么方法g无法通过编译?为什么方法t中的行System.out.println(i instanceof i)无法通过编译?g不能在其签名中使用泛型类型参数t,因为该参数仅为接口i声明 您可能应该将其签名更改为: public class A { public interface I<T> { public Integer toInt(T x); } public static int t(String s, I<String>
g
无法通过编译?为什么方法t
中的行System.out.println(i instanceof i)
无法通过编译?g
不能在其签名中使用泛型类型参数t
,因为该参数仅为接口i
声明
您可能应该将其签名更改为:
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')));
}
}
publicstaticintg(S,I)
i instanceof i
不会通过编译,因为泛型类型信息在编译过程中被擦除,所以在运行时不可用
这正是编译器告诉您的:
无法对参数化类型A.I
执行instanceof check。改用A.I
格式,因为更多的泛型类型信息将在运行时被删除
“g不能在其签名中使用泛型类型参数T”,因此它可以是参数“K”?你为什么选择“s”?@shosh你选择了
s
。您为静态方法g
声明了一个泛型类型参数
,并且对S
参数和i
参数使用S
似乎是有意义的,因为您将S
传递给i.toInt()
。另一个选项:公共静态int g(S,i)
。未测试,至少可能无法与您的消息正文一起使用。@OleV.V。不,它不起作用,因为I
的toInt
方法需要一个t
参数,而不是S
参数。@shosh这两种方法都可以起作用,因为Integer可以自动取消绑定到int。也就是说,除非Integer-toInt(tx)
可能返回null,在这种情况下,t
和g
方法将抛出NullPointerException
。
public static <S> int g(S s, I<S> i)