I have an Interface and two Classes which are implementing the Interface.
public interface MyInterface {
public void firstMethod();
public int secondMethod();
}
public class MyClass1 implements MyInterface {
public void firstMethod() {}
}
public class MyClass2 implements MyInterface {
public void firstMethod() {}
public int secondMethod() {}
}
The class MyClass1 is telling me to Add unimplemented methods, because the secondMethod is not implemented, OK I will do that. But the problem is that I don’t need this method in MyClass1.
In your opinion what is the best thing to do?
- Add the unimplemented method with something like
return 0 - There is another way to fix this if I don’t want to implement it.
You should do one of the following:
Break up the interface into smaller pieces and compose as needed. This is the preferred approach, especially if you control
MyInterface.Return the most sensible default value that you can.
Throw an
UnsupportedOperationException.Here’s a more illustrative example. Let’s say your interface looks like this:
If your
MyClass1is actually aBoatand doesn’t have a vehicle identification number, then it doesn’t make sense for you to implement this. In fact, it’s actually wrong. Other clients expect you to have this value, but you can’t give it to them.It would be better to chunk and compose the interfaces into smaller pieces, using the right slice as necessary. For example, you might instead write this:
This is the best approach since it segments the responsibilities exactly as needed across the interfaces.
If it really was important in your domain for all Driveables to have a vehicle identification number, and this is just a special case where the vehicle identification number is unknown or not available, then you can provide a default implementation:
If it would be wrong in your domain to return a vehicle identification number at all, then you should throw an exception: