java - 使用泛型 : Instantiating an object of a generic class with parent and child values in generic

标签 java generics subtyping

考试中的问题指出: 编写一个名为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/

相关文章:

java - 使用泛型返回参数类的实例

generics - 方法调用的默认类型

oop - 接口(interface)属于即席多态性(即重载)还是子类型多态性?

c++ - 在子类型上调用函数是如何实现的?

java - 使用 java.io 寻找 ByteArrayInputStream

java - 使用java在openCV中使用Mat

java - 这是在 Java 中创建锁的可接受方式吗?

c++ - 为什么我不能使用浮点值作为模板参数?

types - 通配符模式覆盖多态变体的子类型约束

java - 无法在 JavaFX 应用程序中找到 RXTX native DLL