簡體   English   中英

Java中的通用列表初始化

[英]Generic List initialization in java

我對List的初始化有疑問。 項目的類在編譯時未知-它們可以是int,float,string或自定義類。

所以我嘗試了這個:

public class Sensordevice {
    private List<?> valueList;

    public void setValueList(List<?> valueList) {
        this.valueList = valueList;
    }   

    public void addValue(Object value) {
        if(valueList == null){
            valueList = getList(value.getClass());
        }
        valueList.add(value);
    }

    private <T> List<T> getList(Class<T> requiredType) {
        return new ArrayList<T>();
    }
}

但是我在addValue方法中的valueList.add(value)處收到此錯誤:

類型List中的方法add(capture#4-of?)不適用於參數(對象)


更新

非常感謝您的回復。 此解決方案適用於我。

public class Sensordevice<T> {
    private List<T> valueList;

    public void setValueList(List<T> valueList) {
        this.valueList = valueList;
    }   

    public void addValue(T value) {
        if(valueList == null){
            valueList = new ArrayList<T>();
        }
        valueList.add(value);
    }
}

因此,如果您不知道您要使用的特定類型,請使您的類通用:

public class Sensordevice<T> { 

    private List<T> valueList;

    public void setValueList(List<T> valueList) {
        this.valueList = valueList;
    }   

    public void addValue(T value) {
        if(valueList == null){
            valueList = getList(value.getClass());
        }
        valueList.add(value);
    }

    private List<T> getList() {
        return new ArrayList<T>();
    }
}

這對我有用。 “工作”是指我沒有任何錯誤。 它似乎沒有提供任何功能,因為沒有任何方法可以從Sensordevice獲取對象列表,因為getList只是返回一個新的空列表,但這就是您提供的代碼。 我認為錯誤的核心是讓addValue采用Object而不是T

public class Sensordevice {
    private List valueList;

    public <T> void setValueList(List<T> valueList) {
        this.valueList = valueList;
    }

    public <T> void addValue(T value) {
        if(valueList == null){
            valueList = getList(value.getClass());
        }
        valueList.add(value);
    }

    private <T> List<T> getList(Class<T> requiredType) {
        return new ArrayList<>();
    }
}

public static void main(String[] args) {
    Sensordevice sd = new Sensordevice();
    sd.addValue(new Object());
    sd.addValue(new Integer(3));
    sd.addValue("");
    sd.addValue(new Sensordevice());

    System.out.println(sd.getList(Sensordevice.class));
}

如果您不知道List類型,則可以不指定任何類型說明,只需輸入: private List valueList;

valueList更改為:private List valueList; getList()可以:

private <T> List<Object> getList(Class<T> requiredType) {
        return new ArrayList<Object>();
    }

這樣可以修復錯誤,並且看起來可以正常工作。 我用字符串,浮點數和整數進行了測試。

暫無
暫無

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

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