Я столкнулся с различными сообщениями, в которых говорится, что использование instanceof не считается хорошей практикой.Использование instanceof operaator для десериализации
http://www.javapractices.com/topic/TopicAction.do?Id=31 https://www.artima.com/interfacedesign/PreferPoly.html
Я нахожусь в ситуации, когда у меня есть упорядоченный объект, который может быть 7,8 реальных типов. Сейчас я использую оператор insntanceof
и проверяю с различными условиями if, является ли объект фактическим, а затем выполняет некоторые операции.
мой дизайн плохой?
Если да, то как решить эту проблему без использования instanceof
?
Иерархия наследования отличается для каждого объекта, поэтому мне сложно заменить его полиморфизмом.
код
public String exportAsPMML(MLModel model) throws MLModelHandlerException {
Externalizable extModel = model.getModel();
//Deserializing to find the actual type of the model
if (extModel instanceof MLClassificationModel) {
ClassificationModel clasModel = ((MLClassificationModel) extModel).getModel();
if (clasModel instanceof LogisticRegressionModel) {
return ((LogisticRegressionModel) clasModel).toPMML();
} else {
throw new MLModelHandlerException("PMML export not supported for model type");
}
} else if (extModel instanceof MLGeneralizedLinearModel) {
GeneralizedLinearModel genModel = ((MLGeneralizedLinearModel) extModel).getModel();
if (genModel instanceof LinearRegressionModel) {
return ((LinearRegressionModel) genModel).toPMML();
} else if (genModel instanceof LassoModel) {
return ((LassoModel) genModel).toPMML();
} else if (genModel instanceof RidgeRegressionModel) {
return ((RidgeRegressionModel) genModel).toPMML();
} else {
throw new MLModelHandlerException("PMML export not supported for model type");
}
} else if (extModel instanceof MLKMeansModel) {
KMeansModel kmeansModel = ((MLKMeansModel) extModel).getModel();
return kmeansModel.toPMML();
} else {
throw new MLModelHandlerException("PMML export not supported for model type");
}
}
Можете ли вы разместить свой код, где вы использовали 'instanceof'? – Rehman
Вы можете сохранить этот тип как член – user
Его трудно получить четкое изображение без фактического кода. Но в зависимости от вашего дизайна instanceof может быть допустимым решением. Вы могли бы также разработать с помощью генериков – Phuthib