gpt4 book ai didi

java - 如何查看一个对象是否是扩展java中特定父级的类的实例

转载 作者:行者123 更新时间:2023-12-02 04:26:28 24 4
gpt4 key购买 nike

我希望能够检查一个对象是否是扩展特定父类的类的实例。以下是我正在编写的代码的相关部分。我想根据 aggDef 属于特定子类型来设置 aggType 变量。我知道我无法执行以下代码中所示的操作,但是我可以遵循一种技术来执行此类功能吗? 不幸的是,正确的面向对象设计不是一种选择,我可以在父级中定义抽象方法并让子级知道它们是什么类型,因为这些是专有的不可访问的内部库

    String aggType=null;
AggDef aggDef = queryAggs.get(aggsKey);
if(aggDef != null){
if(aggDef instanceof TermAggDef){
aggType = "terms";
}
else if (aggDef instanceof ? extends StatAggDef){
aggType = "terms_stats";
}
else if (aggDef instanceof RangeAggDef){
aggType = "range";
} else{
aggType= "statistical";
}
}
}

另一种方法是我下面的方式,它可以编译和工作。但这很乏味而且很难看。如何改进?

String aggType;
AggDef aggDef = queryAggs.get(aggsKey);
if(aggDef != null){

if(aggDef instanceof TermAggDef){
aggType = "terms";
}
else if (aggDef instanceof StatAggDef){
if(aggDef instanceof AvgAggDef){
aggType= "statistical";
}else if(aggDef instanceof MaxAggDef){
aggType= "statistical";
}else if(aggDef instanceof MinAggDef){
aggType= "statistical";
}else if(aggDef instanceof SumAggDef){
aggType= "statistical";
} else{
aggType = "terms_stats";
}
}
else if (aggDef instanceof RangeAggDef){
aggType = "range";
}
}

最佳答案

与其经历所有这些心理体操,为什么不直接编写面向对象的代码,例如:

public abstract class AggDef { // horribly named class
public abstract Type getType();
...
}

并在每个子类上重写该方法。

public class StatAggDef extends AggDef { 

@Override
public Type getType() {
//something concrete, ideally not a String....
}

}

当您添加新类型时,它的可扩展性要强得多。使用 instanceof 很好地表明您尚未真正正确地对应用程序进行建模。

关于java - 如何查看一个对象是否是扩展java中特定父级的类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32084003/

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