Reputation: 978
I want to call a method using a collection of objects that all implement the same interface. Is this possible?
public class GenericsTest {
public void main() {
ArrayList<Strange> thisWorks = new ArrayList<>();
isAllStrange(thisWorks);
ArrayList<Person> thisDoesNot = new ArrayList<>();
isAllStrange(thisDoesNot);
}
public boolean isAllStrange(ArrayList<Strange> strangeCollection) {
for (Strange object : strangeCollection) {
if (object.isStrange())
return true;
}
return false;
}
public interface Strange {
public boolean isStrange();
}
public class Person implements Strange {
public boolean isStrange() {
return true;
}
}
}
Upvotes: 2
Views: 72
Reputation: 9456
Read about WildCard in Genrics.
You can do this using
<? extends Strange >
Upvotes: 1
Reputation: 85779
You can do this using the <? extends Interface>
notation:
public boolean isAllStrange(List<? extends Strange> strangeCollection) {
for (Strange object : strangeCollection) {
if (object.isStrange())
return true;
}
return false;
}
Also, do not use ArrayList
directly, instead use List
. More of this:
Upvotes: 5