2009-11-12 5 views
2

Nous avons une interface REST donnée:Java méthode statique solution de contournement?

POST /calculation 
<data>abc</data> 

Ce calcul peut être mis en œuvre par les différents « calculateurs » logiques en fonction de la configuration du serveur.

Nous concevons maintenant l'interface Java que chaque calculatrice doit implémenter. L'interface aura une méthode pour chaque service REST. Etant donné que tous les appels REST (et HTTP) sont sans état, chaque méthode doit être statique. Cependant, vous ne pouvez pas définir de méthodes statiques dans les interfaces Java. Y a-t-il une bonne solution pour cette situation?

Nous pourrions définir les méthodes comme non statiques, puis commencer par créer une instance de la classe de la calculatrice. Cela semble plus clair pour indiquer que les méthodes sont sans état en utilisant le mot-clé static dans l'interface.

Répondre

1

Il me semble que vous voulez une interface avec les méthodes déclarées comme normales, et une classe d'implémentation, puis simplement instancier une seule instance de ceci. Il n'y a aucune raison en soi pour que les méthodes elles-mêmes soient statiques.

1

Pourquoi pensez-vous que les méthodes devraient être être statiques? Ils pourraient sûrement être, mais cela vous limiterait en termes de brancher une implémentation différente plus tard. Si vous êtes préoccupé par la consommation de mémoire ou similaire, l'utilisation d'un Singleton ferait la même chose que statique pour vous, comme vous l'avez déjà dit dans le dernier paragraphe de votre question.

7

Sans état ne signifie pas statique. Stateless signifie que le composant ne dépend pas de l'état. Je dis composant, car toute l'implémentation de votre interface est en fait sans état - elle n'aura aucune variable membre. Donc plusieurs instances des classes d'implémentation sont parfaitement OK. Surtout si vous avez un contexte pour les gérer - Spring ou EJB par exemple.

0

Si aucune des classes implémentant cette interface n'a besoin de modifier l'implémentation, utilisez static method dans l'interface en tant que méthode helper.

Vous n'avez pas besoin de solution de contournement avec la version java 8.

Java 8 prend en charge les méthodes statiques dans l'interface. Jetez un oeil à cette documentation page.

Méthodes statiques:

En plus des méthodes par défaut, vous pouvez définir des méthodes statiques dans les interfaces. (Une méthode statique est une méthode associée à la classe dans laquelle elle est définie plutôt qu'à un objet.Chaque instance de la classe partage ses méthodes statiques.)

Ceci facilite l'organisation de l'aide méthodes dans vos bibliothèques; vous pouvez garder static methods spécifique à un interface dans le même interface plutôt que dans un separate class

Autre solution à votre problème utilise Singleton comme suggéré dans la réponse acceptée.

Questions connexes