So I have 3 classes.
Abstract class A
Class B extends class A
independent Class C
In class D that contains the main method, I create a list of instances of class B
List<B> b = methodCall(); // the method returns a list of instances of class B
Now in class C I have one method that is common to both A and B, and hence I don’t want to duplicate it. I want to have one method that takes as input an instance of class A, as follows:
public void someMethod(List<A> a)
However, when I do:
C c = new C();
c.someMethod(b);
I get an error that some-method is not applicable for the argument List<B>, instead it’s expecting to get List<A>.
Is there a good way to fix this problem?
Many thanks!
If you have a method which expects
List<A>, and a classB extends A, and you want to pass this method aList<B>, then you should declare the method as:This allows the list passed to the method to be a List of A or anything that extends B.
Note though that you will not be able to tell the exact type of
?passed into the method.Also, if you have duplicated methods between two classes, that’s probably a sign that something is off with your design.