gpt4 book ai didi

java - 通用外部类的 "instanceof"问题

转载 作者:行者123 更新时间:2023-11-30 07:32:04 25 4
gpt4 key购买 nike

以下代码无法编译:

class OuterClass<T> {

class BaseClass { }

class SubClass extends BaseClass { }

public void test(BaseClass myObject) {
boolean b = (myObject instanceof SubClass);
}
}

方法 test() 上的错误消息是:“无法对参数化类型 MyOuterClass.MySubClass 执行 instanceof 检查。改用 MySubClass 形式,因为在运行时将删除更多通用类型信息

那么如何判断变量是否为BaseClass类型呢?我已经尝试了以下所有方法,但它们都不起作用:

boolean b1 = (myObject instanceof SubClass);
boolean b2 = (myObject instanceof SubClass<T>);
boolean b3 = (myObject instanceof SubClass<?>);
boolean b4 = (myObject instanceof OuterClass.SubClass);
boolean b5 = (myObject instanceof OuterClass<T>.SubClass);
boolean b6 = (myObject instanceof OuterClass<?>.SubClass);
boolean b7 = (myObject instanceof OuterClass.SubClass<T>);
boolean b8 = (myObject instanceof OuterClass.SubClass<?>);

我认为这个问题与 JVM 版本无关,但为了以防万一,我使用的是 Sun 的 1.6.0_22-b04 版本。

最佳答案

这只是部分答案,但如果我们按如下方式修改示例,它确实可以编译:

class OuterClass<T> {

class InnerClass { }

public void test(Object myObject) {
boolean b1 = (myObject instanceof OuterClass.InnerClass); // Works
boolean b2 = (myObject instanceof OuterClass<?>.InnerClass); // Also works
}
}

关于java - 通用外部类的 "instanceof"问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6849591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com