My dislike of Java's static import
While playing around with JBehave I was reminded of my dislike of the import static feature which was introduced in Java 1.5.
Using import static allows us to access static members defined in another class without referencing the class name. For example suppose we want to use the following method in our code:
Normally we would need to include the class name (Math) that the static function (max) belongs to. By using the import static we can reference max like so:
import static java.lang.Math.max; ... max(1,2);
The benefit of this approach is that it makes the code read more fluently but the disadvantage is that you can’t immediately tell where a method lives. I want to be able to tell what is going on in the code from looking at it and anything which prevents this is a hindrance.
The official documentation even suggests using this functionality sparingly:
So when should you use static import? Very sparingly! Only use it when you'd otherwise be tempted to declare local copies of constants, or to abuse inheritance (the Constant Interface Antipattern). In other words, use it when you require frequent access to static members from one or two classes.
On my last project we ended up saying that import static was allowed in test code because there were relatively few places the static methods could be imported from, but when it came to production code the fully qualified path was required.