Я хочу, чтобы проверить, является ли объект экземпляром класса, который расширяет определенный родительский класс. Ниже приведена соответствующая часть кода, который я пишу. Я хочу установить переменную aggType на основе aggDef определенного типа ребенка. Я знаю, что не могу сделать следующее, как показано ниже в коде, но есть ли способ, которым я могу следовать, чтобы выполнять такую функцию? К сожалению, правильный объектно-ориентированный дизайн не вариант, где я могу определить абстрактный метод в родительском и есть дети, знают, что они типа, поскольку они являются запатентованными недоступные внутренние библиотекиКак узнать, является ли объект экземпляром класса, который расширяет определенный родительский элемент в java
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";
}
}
или даже лучше, 'interface Typed {type getType(); } 'и' класс AggDef реализует Typed ... ' – Bohemian
Это, к сожалению, не является вариантом, так как AggDef, который в конечном итоге становится доступным, содержит список AggDefs. И если те aggDefs содержат определенный тип, весь тип будет differnet –
@Horse Я думаю, вам нужно показать, что в вашем вопросе тогда - пожалуйста, отредактируйте его, чтобы немного подробнее узнать. – Bohemian