Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Prevent anonymously subclassing
Is it possible to somehow prohibit anonymously subclassing of a specific class? For instance, with a plain public parent class:
public class Parent {
}
Extending this class should not be possible with an unnamed, anonymous subclass:
var myClass = new Parent() { ... }
However, all other forms of subclassing or usage should work, such as:
public class Child extends Parent {
public static Object feelingLucky(boolean really) {
return really ? new Child() : new Parent();
}
}
1 answer
There is no keyword or compile-time construct to prevent this, but it can be accomplished through the use of a runtime exception:
class Parent {
public Parent() {
if (getClass().isAnonymousClass()) {
throw new IllegalStateException("You violated my secret rule!");
}
}
}
For actual use in production code, one should probably reconsider the reasons for which one would like to do this. Limiting the creation of anonymous classes is a possibility, but generally a bad idea.
1 comment thread