Hi devs

We do have several interfaces [1] just being used as constants holder (and even more, not all of them are declared as static fields) which isn't the most preferable construct:

"The constant interface pattern is a poor use of interfaces. That a class uses some constants internally is an implementation detail. Implementing a constant interface causes this implementation detail to leak into the class's exported API. It is of no consequence to the users of a class that the class implements a constant interface. In fact, it may even confuse them. Worse, it represents a commitment: if in a future release the class is modified so that it no longer needs to use the constants, it still must implement the interface to ensure binary compatibility. If a nonfinal class implements a constant interface, all of its subclasses will have their namespaces polluted by the constants in the interface." [2]

Is there any need to have them declared in an interface or is it just a poor use? If there's no need we they could be implemented e.g. as enum or as static class an them static import could be used.

WDOT?

Regards
Felix

[1] e.g.
org.apache.directory.server.constants.ApacheSchemaConstants
org.apache.directory.server.constants.CoreSchemaConstants (even nowhere referenced in the code)
org.apache.directory.server.constants.ServerDNConstants
org.apache.directory.server.constants.SystemSchemaConstants (even nowhere referenced in the code)

[2] Joshua Bloch, "Effective Java (2nd Edition)"

Reply via email to