我有一个类,该类的实例将被序列化。因此,该类实现了Serializable
。该类具有type字段,当然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>();
以上是完全合法的,尽管没有必要。
简短而令人失望的答案是:不,如果不使用泛型或自定义类,则字段不能同时为多种类型。
我一直在寻找一种声明字段(实际上是任何类型的变量)为交集类型的方法。虽然路口的类型,因为Java 6中引入泛型在Java中存在,在Java 8拉姆达需要的支持,并为我们带来了路口转换。尽管如此,变量的交集类型尚未实现。让我们期盼最好的结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句