Je veux forcer un downcast sur un objet qui ne peut pas être lancé et je me demandais quelle serait la bonne approche. Le cas d'utilisation est que j'ai une liste de règles qui sont vérifiées et ce qui générera une liste de règles échouées. Une règle en échec est une sous-classe d'une règle. Mais descente comme
FailedRule failedRule = (FailedRule) règle;Downcasting forcé en Java
échouera parce que l'objet de la règle n'est pas une FailedRule instanceof
Pour contourner ce que j'instancier un clone;
FailedRule failedRule = new FailedRule (règle);
et ma classe FailedRule ressemble à ceci
public class FailedRule extends Rule{
/*
*force a down cast from Rule to FailedRule through cloning
*/
public FailedRule (Rule upcast){
super.setRuleCode(upcast.getRuleCode());
super.setType(upcast.getType());
..
Est-il possible de faire plus facile cela? Pour me répondre, la conception est défectueuse, le code doit être:
public class FailedRule{
private Rule rule;
..
public setRule(Rule rule){
..
Je me demande comment vous finissez par devoir baisser sur un objet qui ne peut pas être coulé. Explique-nous ce que tu veux vraiment faire. –
Je pensais avoir fait :-). Je parcours une liste de règles et retourne une liste de règles qui ont échoué. Le processus de vérification renvoie une bonne quantité d'informations par règle, pourquoi et quand et comment elle a échoué. La réponse de Mark est correcte, mon design est faux, je ne peux pas dire qu'une règle qui a échoué est une règle. Il a une «règle». J'ai édité la question parce que je ne peux pas mettre le code dans ces commentaires – Meindert