考试中的问题指出: 编写一个名为Registration的类,它可以存储T类型的变量,其中T可以替换为String, 个人、学生等。应该可以实例化注册,如下所示:
Registration<String> r1 = new Registration<String>();
Registration<Person> r2 = new Registration<Student>();
我无法弄清楚如何编写类头的泛型部分的声明。下面我给出了注册类(class)。需要注意的是,Student 类继承了 Person 类。
import java.util.List;
import java.util.ArrayList;
public class Registration<T extends Person> //I believe my issue is here{
private T [] roster;
private List<T> waitList;
private static int rosterCount;
private T lastInstance;
public Registration () {
roster = (T[]) new Object[100];
waitList = new ArrayList<>();
rosterCount = 0;
lastInstance = null;
}
public void addIndex (T t) {
if (rosterCount>=100) {
waitList.add(t);
}
else {
roster [rosterCount] = t;
rosterCount++;
}
lastInstance = t;
}
public T getLastInstance() {
return lastInstance;
}
public int getRosterCount() {
return rosterCount;
}
public int getWaitListCount() {
return waitList.size();
}
}
**摘自 Uoft CSC207 Aug2017 考试
最佳答案
如果注册
必须足够通用才能接受任何类型,例如。 String
,那么你应该将其声明为:
class Registration<T> {
private T[] roster;
...
public Registration (Class<T> clazz) {
roster = (T[])Array.newInstance(clazz, 100);
}
...
}
关于java - 使用泛型 : Instantiating an object of a generic class with parent and child values in generic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50072443/