簡體   English   中英

Java下界類型List作為參數

[英]Java lower bounded type List as parameter

您好,我得到了兩個類:Person類和Employee類,它們擴展了Person,它們看起來非常簡單

public class Person {
    private String name;
    private String surname;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSurname() {
        return surname;
    }
    public void setSurname(String surname) {
        this.surname = surname;
    }
    public Person(String name, String surname) {
        super();
        this.name = name;
        this.surname = surname;
    }


}

public class Employee extends Person {
    private String salary;
    private String position;
    public String getSalary() {
        return salary;
    }
    public void setSalary(String salary) {
        this.salary = salary;
    }
    public String getPosition() {
        return position;
    }
    public void setPosition(String position) {
        this.position = position;
    }
    public Employee(String name, String surname, String salary, String position) {
        super(name, surname);
        this.salary = salary;
        this.position = position;
    }



}

我想編寫一個將Person添加到下界參數化列表的函數

public class AuxiliaryClass {
    public static void addToList(List<? super Employee> list){
        Person osoba1 = new Person("Czeslaw","Spiewa");
        list.add(osoba1);
    }


}

但是eclipse不允許出現錯誤消息:“列表類型中的方法add(capture#1-of?super Employee)不適用於參數(人)

List<? super Employee> List<? super Employee>意思是“一些未知但具體的類X的列表,它是Employee超類

現在應該清楚為什么不能將Person類型的對象添加到此列表中: Person不是X

也許,如果您解釋了您的意思,那么我們可能會提供更多幫助。

更新 :實際上,我收回了它。 Person X ,因為它是Employee的子類, EmployeeX的子類。 應該可以將其添加到列表中。 看起來月食就充滿了。 Javac(1.8)允許我執行此操作,intellij也是如此。

對困惑感到抱歉。

您不允許將Person實例放入列表,因為調用函數時可以提供例如List集合。 如果您能夠將Person放入此集合中,這將導致在訪問此集合內容時發生ClassCastException,因為每個集合項都將被視為Employee(但Person實例不能轉換為Employee)。

您應該看一下: https : //en.wikipedia.org/wiki/Liskov_substitution_principle

在這種情況下,您想將Persion放在Employee列表中,但並不是每個Persion都是Employee,這就是為什么它失敗的原因。 如果列表中包含“期望人物”或任何擴展“人物”的內容,您將能夠做到這一點。

List<? extends Person>

然后,您可以添加一個人,但也可以添加一個員工,因為每個員工都是一個人。

為了清楚起見,我不想在列表中添加一個類型為Person的子類型的對象。 我想添加一個對象,它是Employee類型的超類型(祖先)。 我想知道上述操作是否可行?

暫無
暫無

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

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