I have a set of singleton classes and I want to avoid boilerplate code. Here is what I have now:
public class Mammal {
    protected Mammal() {}
}
public class Cat extends Mammal {
    static protected Cat instance = null;
    static public Cat getInstance() {
        if (null == instance) {
            instance = new Cat();
        }
        return instance;
    }
    private Cat() {
        // something cat-specific
    }
}
This works and there's nothing wrong with it, except that I have many subclasses of Mammal that must replicate the getInstance() method. I would prefer something like this, if possible:
public class Mammal {
    protected Mammal() {}
    static protected Mammal instance = null;
    static public Mammal getInstance() {
        if (null == instance) {
            instance = new Mammal();
        }
        return instance;
    }
}
public class Cat extends Mammal {
    private Cat() {
        // something cat-specific
    }
}
How do I do that?
You can't since constructors are neither inherited nor overridable.  The new Mammal() in your desired example creates only a Mammal, not one of its subclasses.  I suggest you look at the Factory pattern, or go to something like Spring, which is intended for just this situation.
You can use enum to create singletons.
public enum Mammal {
    Cat {
        // put custom fields and methods here
    }
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With