簡體   English   中英

如何使用泛型來限制子類中的方法參數類型?

[英]How to use generic to restrict method parameter type in subclass?

我有一個名為Teacher的父類,定義如下:

import java.util.LinkedList;
import java.util.List;

public class Teacher {
    public List<Student> list = null;

    public Teacher(String id) {
        list = new LinkedList<Student>();
    }

    public void addStudent(Student tb){
        list.add(tb);
    }
}

Student

public class Student {
    public String getStudentName(){
        return "student";
    }
}

以及一個擴展了Teacher的子類和一個擴展了Student的子類:

import java.util.List;

public class MathStudent extends Student{
    public String getStudentName(){
        return "math student";
    }
}

public class MathTeacher extends Teacher{

    public MathTeacher(String id) {
        super(id);
        // TODO Auto-generated constructor stub
    }
}

顯然, MathTeacher繼承了addStudent方法。 但是問題是,當我構造一個MathTeacher對象並MathTeacher添加一個學生時,我只希望它成為MathStudent而不是Student ,就像這樣:

MathTeacher clc = new MathTeacher("a");
MathStudent tc = new MathStudent();
clc.add(tc);
Student student = new Student();
clc.add(student); // I want this line to throw compling error to avoid a Student object is added

我能做什么? 我猜java泛型可能有用。

例如,您可以實現以下目標:

public class Teacher <T extends Student> {
    public List<T> list = null;

    public Teacher(String id) {
        list = new LinkedList<T>();
    }

    public void addStudent(T tb){
        list.add(tb);
    }
}

public class MathTeacher extends Teacher <MathStudent> {

    public MathTeacher(String id) {
        super(id);
        // TODO Auto-generated constructor stub
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM