web-dev-qa-db-fra.com

Existe-t-il quelque chose comme NotImplementedException de .NET en Java?

Existe-t-il quelque chose comme NotImplementedException de .NET en Java?

519
devoured elysium

Commons Lang l'a. Ou vous pouvez lancer un UnsupportedOperationException .

496
Ravi Wallau

Je pense que le Java.lang.UnsupportedOperationException est ce que vous recherchez.

277
Chris Dail

Vous pouvez le faire vous-même (c'est ce que j'ai fait). Pour ne pas être dérangé par la gestion des exceptions, il vous suffit d'étendre l'exception RuntimeException. Votre classe pourrait ressembler à ceci:

public class NotImplementedException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public NotImplementedException(){}
}

Vous pouvez l'étendre pour prendre un message - mais si vous utilisez la méthode comme je le fais (c'est-à-dire, rappelons qu'il reste encore quelque chose à implémenter), alors généralement aucun message supplémentaire n'est nécessaire.

J'ose dire que je n'utilise que cette méthode alors que je suis en train de développer un système me permet de ne pas perdre de vue quelles méthodes ne sont toujours pas implémentées correctement :)

54
Ready4Android

Non, il n'y en a pas et ce n'est probablement pas là, car il y a très peu d'utilisations valables. Je réfléchirais à deux fois avant de l'utiliser. En outre, il est en effet facile de créer vous-même.

Veuillez vous référer à cette discussion pour savoir pourquoi c'est même dans .NET.

J'imagine que UnsupportedOperationException est proche, bien qu'il ne soit pas indiqué que l'opération n'est simplement pas implémentée, mais qu'elle n'est même pas prise en charge. Cela pourrait impliquer qu'aucune implémentation valide n'est possible. Pourquoi l'opération serait-elle non prise en charge? Cela devrait-il même être là? Ségrégation d'interface ou problèmes de substitution de Liskov peut-être?

Si le travail est en cours, je choisirais ToBeImplementedException, mais je ne me suis jamais imaginé définir une méthode concrète et je l'ai laissée aussi longtemps.

8
Dormouse

Comme mentionné, le JDK n'a pas de correspondance étroite. Cependant, mon équipe a parfois aussi une utilisation pour une telle exception. Nous aurions pu utiliser UnsupportedOperationException comme suggéré par d'autres réponses, mais nous préférons une classe d'exception personnalisée dans notre bibliothèque de base qui a des constructeurs obsolètes:

public class NotYetImplementedException extends RuntimeException
{
    /**
     * @deprecated Deprecated to remind you to implement the corresponding code
     *             before releasing the software.
     */
    @Deprecated
    public NotYetImplementedException()
    {
    }

    /**
     * @deprecated Deprecated to remind you to implement the corresponding code
     *             before releasing the software.
     */
    @Deprecated
    public NotYetImplementedException(String message)
    {
        super(message);
    }
}

Cette approche présente les avantages suivants:

  1. Lorsque les lecteurs voient NotYetImplementedException, ils savent qu’une mise en œuvre était planifiée et a été oubliée ou est toujours en cours, alors que UnsupportedOperationException indique (conformément à contrats de collecte ) que quelque chose va ne jamais être mis en œuvre. C'est pourquoi nous avons le mot "encore" dans le nom de la classe. En outre, un IDE peut facilement répertorier les sites d'appels.
  2. Avec l’avertissement de dépréciation sur chaque site d’appel, votre IDE et votre outil d’analyse de code statique peuvent vous rappeler où vous devez encore mettre en œuvre quelque chose. (Cette utilisation de la dépréciation peut sembler répréhensible pour certains, mais en réalité la dépréciation ne se limite pas à l'annonce du retrait .)
  3. Les constructeurs sont obsolètes, pas la classe. De cette façon, vous obtenez uniquement un avertissement de dépréciation à l'intérieur de la méthode qui doit être implémentée, pas à la ligne import (JDK 9 corrigé) , cependant).
6
Jens Bannmann