В идеале ваши классы Book
, Student
и Course
должны реализовывать общий интерфейс, обеспечивающий доступ к методу getName()
. Затем вы можете сделать это:
public static String M(Set<? extends HasName> set) {
Iterator<? extends HasName> first = set.iterator();
String id1 = "";
while (first.hasNext()) {
id1 = first.next().getName();
if (id1.equalsIgnoreCase("ABC")) {
return id1 ;
}
}
return id1 ;
}
Обратите внимание, что здесь будет лучше для расширенного для l oop:
String id1 = "";
for (HasName n : set) {
id1 = n.getName();
if (id1.equalsIgnoreCase("ABC")) { return id1; }
}
return id1;
Если нет, вы все равно можете определить один метод, содержащий логи c:
public static <T> String common(Set<T> set, Function<? super T, String> extractor) {
Iterator<T> first = set.iterator();
String id1 = "";
while (first.hasNext()) {
id1 = extractor.apply(first.next());
if (id1.equalsIgnoreCase("ABC")) {
return id1 ;
}
}
return id1 ;
}
Затем вам нужно либо вызвать его напрямую:
String fromBook = common(setOfBooks, Book::getName);
или предоставить методы для вызова общего метода:
String M1(Set<Book> set) {
return common(set, Book::getName);
}
String M2(Set<Student> set) {
return common(set, Student::getName);
}
String M3(Set<Course> set) {
return common(set, Course::getName);
}
Обратите внимание, что они должны иметь разные имена из-за стирания типа.