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


Y a-t-il quelque chose comme .NET NotImplementedException en Java?


479
2018-02-24 20:44


origine


Réponses:


Commons Lang a-t-il. Ou vous pourriez jeter un UnsupportedOperationException.


466
2018-02-24 20:48



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


253
2018-02-24 20:47



Vous pouvez le faire vous-même (c'est ce que j'ai fait) - afin de ne pas être dérangé par la gestion des exceptions, vous étendez simplement le 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, pour rappel, qu'il y a encore quelque chose à implémenter), il n'y a généralement pas besoin de messages supplémentaires.

J'ose dire, que je n'utilise cette méthode, alors que je suis en train de développer un système, il est plus facile pour moi de ne pas perdre de vue les méthodes qui ne sont pas encore implémentées correctement :)


51
2018-04-09 19:39



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

Prière de se référer à cette discussion à propos de pourquoi il est même en. NET.

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

Si ça marche, j'irai ToBeImplementedException, mais je ne me suis jamais trouvé en train de définir une méthode concrète et de la laisser si longtemps qu'elle est en production et qu'une telle exception serait nécessaire.


8
2018-01-18 22:12



Comme mentionné, le JDK n'a pas de correspondance étroite. Cependant, mon équipe a parfois aussi une utilité pour une telle exception. Nous aurions pu partir avec 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 a les avantages suivants:

  1. Quand les lecteurs voient NotYetImplementedException, ils savent qu'une mise en œuvre a été planifiée et a été oubliée ou est toujours en cours, alors que UnsupportedOperationException dit (en ligne avec contrats de recouvrement) que quelque chose ne sera jamais 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'appel.
  2. Avec l'avertissement de dépréciation sur chaque site d'appel, votre outil d'analyse de code IDE et statique peut vous rappeler où vous devez encore implémenter quelque chose. (Cette utilisation de la dépréciation peut se sentir mal à certains, mais en fait la dépréciation ne se limite pas à annoncer le retrait.)
  3. Les constructeurs sont obsolètes, pas la classe. De cette façon, vous obtenez uniquement un avertissement de dépréciation dans la méthode qui doit être implémentée, pas au import ligne (JDK 9 corrigé cela, bien que).

0
2018-05-22 07:06