Я не очень понимаю, зачем вам использовать аннотации для такой задачи? В результате вы получите несколько странных методов, которые ваша инфраструктура не сможет проанализировать, или проанализируете их неверно, что приведет вас к созданию набора правил, как правильно писать эти методы, чтобы ваша инфраструктура могла их понимать. *
Я думаю, что вместо этого лучше использовать интерфейсы. Создайте свой собственный интерфейс с именем StudentList или чем-то подобным, с такими методами, как getIterator, getIndex и т. Д., И заставьте студентов реализовать этот интерфейс. Затем вы сможете загрузить любой из этих классов и использовать его на основе интерфейса, который они реализуют.
Кроме того, вы можете просто повторно использовать доступные интерфейсы, такие как List или Collection, однако это может заставить студентов написать много неиспользуемого кода для реализации этих интерфейсов. Поэтому я бы предпочел написать свой собственный интерфейс.
Примером такого интерфейса будет:
interface StudentList<T> {
public Iterator<T> getIterator();
public T get(int index);
public void add(T element);
public void remove(T element);
}
Студенты реализуют это следующим образом (этот пример просто оборачивается вокруг ArrayList):
class MyList<T> implements StudentList<T> {
private ArrayList<T> realList;
public MyList() {
realList = new ArrayList<T>();
}
public void add(T element) {
realList.add(element);
}
.......
}
И вы бы проверили это так:
void testList(StudentList<String> list) {
list.add(5);
list.add(10);
list.get(20);
}
testList(new MyList<String>());
Таким образом, для студентов и для вас все ясно.