views:

286

answers:

3

We have a given REST interface:

POST /calculation
<data>abc</data>

This calculation can be implemented by different logical "calculators" depending on the server config.

We are now designing the Java interface that each calculator must implement. The interface will have a method for each REST service.

Given that all REST (and HTTP) calls are stateless, each method should be static. However you can't define static methods in Java interfaces. Is there a good workaround for this situation?

We could define the methods as non static and then just first create an instance of the calculator class. It just seems cleaner to indicate that the methods are stateless by using the static keyword in the interface.

+1  A: 

Why do you think the methods should be static? They surely could be, but that would limit you in terms of plugging in a different implementation later. If you are concerned about memory consumption or the like, using a Singleton would do the same as static for you, as you already said in the last paragraph of your question.

Daniel Schneller
+1  A: 

It seems to me that you want an interface with the methods declared as normal, and an implementing class, and then simply instantiate a single instance of this. There's no reason per se for the methods themselves to be static.

Brian Agnew
Right, guess we'll just have to do this.
Marcus
+4  A: 

Stateless doesn't mean static. Statless means that the component doesn't rely on state. I say component, because the whole implementation of your interfaces is actualyl stateless - it will not have any member variables. So multiple instances of the implementation classes is perfectly OK. Especially if you have a context to manage them - Spring or EJB for example.

Bozho
Good point, we just won't utilize any class instance variables.
Marcus