I often find myself writing Java constructors like this:
public SomeClass(final SomeType parameter) {
super(parameter);
if (parameter == null)
throw new NullPointerException();
} when what I really want to write is this:
public SomeClass(final SomeType parameter) {
if (parameter == null) throw new NullPointerException();
super(parameter);
} which is, unfortunately, illegal. But there is a simple solution:
public SomeClass(final SomeType parameter) {
super(asNotNull(parameter));
} What is asNotNull(?)?
public static <T> T asNotNull(final T parameter) {
if (parameter == null) throw new NullPointerException();
return parameter;
} As I generify the input, I am able to preserve the type on output so including calls to asNotNull(T) lose no type information and I need not write casts.
Of course, you can generalize this idea further and provide a family of tests or a more general method which takes an interface as a parameter or even an Exception parameter to change the thrown exception.
Shouldn't it be up to the super class to check if the argument is null or not?
ReplyDeleteYes, but... the case I had in code for this problem was that I needed to vet the parameters for my own class and calling super(null) was expensive.
ReplyDelete