簡體   English   中英

Java類的字段可以是多種類型而不使用泛型嗎?

[英]Can a field of a Java class be of multiple types without using generics?

我有一個類,其實例將被序列化。 因此,該類實現了Serializable 該類有一個List類型的字段,當然也必須是Serializable 想象一下這個類看起來像這樣:

import java.io.Serializable;
import java.util.List;

public class Report implements Serializable {

    private static final long serialVersionUID = 12345L;

    private List<Record> records = new ArrayList<>();
}

現在我知道ArrayListSerializable ,但我寧願聲明我的字段是某種接口類型。

我們的SonarQube分析代碼時會出現問題。 它抱怨說,現場records應該是一些Serializable類型,而SonarQube是正確的。

但是由於該字段是一個實現細節(私有成員),我不想在類上使用泛型。

這里有我的問題:使用自我應用約束來聲明某些接口類型的字段而不使用泛型,是否可以將字段聲明為多個(接口)類型?

僅供參考:我知道可以投射到多種類型,但這是完全不同的。

Object o = (List<Serializable> & Serializable) new ArrayList<Serializable>();

盡管不必要,上述內容完全合法。

看起來你的字段無論如何都是private的,所以無論是List還是ArrayList並不重要。 您可以將該字段ArrayList可序列化的ArrayList並在getter中使用List

public class Report implements Serializable {

    private ArrayList<Record> records = new ArrayList<>();

    ...

    public List<Record> getRecords() {
        return this.records;
    }
}

(雖然這不能回答一個字段是否可以有多種類型的問題,但它可能是您實際問題的解決方案。)

簡短且幻想破滅的答案是:不,如果不使用泛型或自定義類,字段不能同時具有多種類型。

我正在尋找的是一種將一個字段 - 實際上是任何一種變量 - 聲明為交集類型的方法。 雖然自Java 6中引入泛型以來Java中存在交集類型 ,但Java 8中的lambda支持需要並為我們帶來交叉轉換。 但是,尚未實現變量的交集類型。 讓我們期盼最好的結果。

暫無
暫無

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

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