如何重构这个简单的类字段

Saa*_*aad 0 java oop inheritance

我有一个非常基本的OOP问题.我有两个课程如下

public class Class1 {
    private String field1;
    private String field2;
    private List<String> field3; 
    // constructors 
}

public class Class2 {
    private String field1;
    private String field2;
    private List<Object1> field3; 
    // constructors 
}
Run Code Online (Sandbox Code Playgroud)

我必须创建class2的唯一原因是因为class1中的List可以是字符串列表或Object2列表.有没有办法摆脱Class2,并让field3表现为String的列表,也作为Object2的列表.

我知道我可以做点什么

public class Class1 {
    private String field1;
    private String field2;
    private List<String> field3; 
    private List<Object1> field4; 

    // constructors which are initializing null to either field 3 or field 4
}
Run Code Online (Sandbox Code Playgroud)

但上面看起来并不干净,因为用任何一个列表实例化的对象都不应该在其他List中有任何引用.

mil*_*ose 5

使用泛型:

public class Class1<TField3> {
    private String field1;
    private String field2;
    private List<TField3> field3; 
    // constructors 
}

Class1<String> stringObj = new Class1<>();
Run Code Online (Sandbox Code Playgroud)