Please consider the following snippet:
public interface MyInterface {
public int getId();
}
public class MyPojo implements MyInterface {
private int i
Change your method to use a wildcard:
public ArrayList extends MyInterface> getMyInterfaces() {
ArrayList myPojos = new ArrayList(0);
myPojos.add(new MyPojo(0));
myPojos.add(new MyPojo(1));
return myPojos;
}
This will prevent the caller from trying to add other implementations of the interface to the list. Alternatively, you could just write:
public ArrayList getMyInterfaces() {
// Note the change here
ArrayList myPojos = new ArrayList(0);
myPojos.add(new MyPojo(0));
myPojos.add(new MyPojo(1));
return myPojos;
}
As discussed in the comments:
It's usually better to use interfaces instead of concrete types for return types. So the suggested signature would probably be one of:
public List getMyInterfaces()
public Collection getMyInterfaces()
public Iterable getMyInterfaces()