簡體   English   中英

Java泛型:如何處理原始類型成員變量並避免出現警告?

[英]Java Generics: how handle raw type member variable and avoid warnings?

我有一個類,它具有一個稱為Argument<T>的原始類型成員變量。 類是為了簡單的解決此類型的包,並通過構造一個通用的方式分配所有值,因為類型Argument ,並傳遞給構造函數的參數是不是在編譯時已知。

public class ArgumentWrapper {

    private Argument argument;

    public ArgumentImplementation(Class<?> type, String name, 
            Object defaultValue, Set<?> allowedValues, 
            Comparable<?> lowerBound, Comparable<?> upperBound) {
        argument = new Argument<>(type);
        argument.setName(name);
        argument.setDefaultValue(defaultValue);
        argument.setAllowedValues(allowedValues);
        argument.setLowerBound(lowerBound);
        argument.setUpperBound(upperBound);
    }

    // some getters...

}

現在在我的代碼中,我收到很多警告說

Argument is a raw type. References to generic type Argument<T> should be 
parameterized

在成員和

Type safety: The method setDefaultValue(Object) belongs to the raw type Argument.
References to generic type Argument<T> should be parameterized

分配了構造函數參數的位置。

我知道我無法將成員更改為private Argument<?> argument; 因為當在構造函數中將通用參數分配給它時,我得到了錯誤。

您對此有何建議? 如何避免這些警告而又不引入錯誤? 如何處理不同/更好的通用類型成員變量?

在評論的幫助和一些來回的嘗試下,我自己得到了答案。

ArgumentWrapper類應該是通用的,並且通用類型T應該在所有地方使用。

public class ArgumentWrapper<T> {

    private Argument<T> argument;

    public ArgumentImplementation(Class<T> type, String name, 
            T defaultValue, Set<T> allowedValues, 
            Comparable<T> lowerBound, Comparable<T> upperBound) {
        argument = new Argument<T>(type);
        argument.setName(name);
        argument.setDefaultValue(defaultValue);
        argument.setAllowedValues(allowedValues);
        argument.setLowerBound(lowerBound);
        argument.setUpperBound(upperBound);
    }

    // some getters...

}

暫無
暫無

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

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