[英]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<>();
}
現在我知道ArrayList
是Serializable
,但我寧願聲明我的字段是某種接口類型。
我們的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.