Java8-Find超类引用是一个子类的实例

Java8-Find超类引用是一个子类的实例,java,Java,我正在检查超类引用是否是子类的实例,但无法使其工作,不确定我缺少了什么 拆分策略-超类 SplitByDC-子类 strategiesList-是包含子类实例的列表 //My existing code SplitStrategy strategy; for (Iterator<SplitStrategy> strategyItr = strategiesList.iterator(); strategyItr.hasNext(); splitedList = strate

我正在检查超类引用是否是子类的实例,但无法使其工作,不确定我缺少了什么

拆分策略-超类
SplitByDC-子类

strategiesList-是包含子类实例的列表

//My existing code 
SplitStrategy strategy;
for (Iterator<SplitStrategy> strategyItr = strategiesList.iterator(); strategyItr.hasNext();     splitedList = strategy.execute((List) splitedList)) {
        strategy = (SplitStrategy) strategyItr.next();

        // Added below line to check for a subclass instance - this is returning false 
        if (strategy instanceof SplitByDC) { //Where SplitByDC is a subclass of SplitStrategy 
//我的现有代码
分拆战略;
for(迭代器strategyItr=strategiesList.Iterator();strategyItr.hasNext();splitedList=strategy.execute((List)splitedList)){
strategy=(SplitStrategy)strategyItr.next();
//在下面的行中添加以检查子类实例-返回false
if(strategy instanceof SplitByDC){//其中SplitByDC是SplitStrategy的子类

请参见下面的示例

import java.util.Arrays;
import java.util.List;

public class CheckInstanceOf {
    public static void main(String[] args) {
        List<A> alist = Arrays.asList(new A(), new B(), new B(), new C());
        for (A a: alist) {
            System.out.println(a.getClass().getSimpleName() + "  >> " + (a instanceof B));
        }
    }
}

class A {
}
class B extends A {
}
class C extends A {
}

CheckInstanceOf.main()
A  >> false
B  >> true
B  >> true
C  >> false
导入java.util.array;
导入java.util.List;
公共类CheckInstanceOf{
公共静态void main(字符串[]args){
List alist=Arrays.asList(新的A(),新的B(),新的B(),新的C());
为了(A:A){
System.out.println(a.getClass().getSimpleName()+“>>”+(a instanceof B));
}
}
}
甲级{
}
B类扩展了A类{
}
C类扩展了{
}
CheckInstanceOf.main()
A>>错误
是的
是的
C>>错误

请参见下面的示例

import java.util.Arrays;
import java.util.List;

public class CheckInstanceOf {
    public static void main(String[] args) {
        List<A> alist = Arrays.asList(new A(), new B(), new B(), new C());
        for (A a: alist) {
            System.out.println(a.getClass().getSimpleName() + "  >> " + (a instanceof B));
        }
    }
}

class A {
}
class B extends A {
}
class C extends A {
}

CheckInstanceOf.main()
A  >> false
B  >> true
B  >> true
C  >> false
导入java.util.array;
导入java.util.List;
公共类CheckInstanceOf{
公共静态void main(字符串[]args){
List alist=Arrays.asList(新的A(),新的B(),新的B(),新的C());
为了(A:A){
System.out.println(a.getClass().getSimpleName()+“>>”+(a instanceof B));
}
}
}
甲级{
}
B类扩展了A类{
}
C类扩展了{
}
CheckInstanceOf.main()
A>>错误
是的
是的
C>>错误

您通过强制转换将
策略
强制为
拆分策略
。您的代码虽然不规则,但看起来应该可以工作。向我们展示一个我们可以运行的最小代码示例,它给出了您得到的错误。我没有得到任何错误,它返回false。什么返回false?您不需要强制转换
(拆分策略)itr.next()
如果
strategiesList
属于
。您强制
strategy
成为
SplitStrategy
。您的代码虽然不规则,但看起来应该可以工作。给我们展示一个我们可以运行的最小代码示例,它给出了您得到的错误。我没有得到任何错误,它返回false。什么返回false?Y如果
策略列表属于
,则不需要强制转换
(拆分策略)itr.next()