directory-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Felix Knecht <fe...@otego.com>
Subject Code review - constants in interface
Date Mon, 22 Nov 2010 13:45:22 GMT
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)"

Mime
View raw message