
在Java开发中,我们经常会遇到需要将不同枚举类型的值传递给构造函数的情况。如果直接使用List<Enum>,由于类型不匹配,会导致编译错误。本文将介绍一种通过定义公共接口的方式,解决这个问题,并提供详细的代码示例和注意事项。
假设我们有如下三个枚举类:
public class Enums {
public enum A {
A1,
A2;
}
public enum B {
B1,
B2;
}
public enum C {
C1,
C2;
}
}我们希望创建一个Course对象,并将A.A1, B.B1, C.C1作为参数传递给构造函数。一种尝试是使用List<Enums>,如下所示:
List<Enums> eValues = new ArrayList<Enums>(); eValues.add(Enums.A.A1); // 编译错误:无法将A转换为Enums eValues.add(Enums.B.B1); // 编译错误:无法将B转换为Enums eValues.add(Enums.C.C1); // 编译错误:无法将C转换为Enums //Course c = new Course(eValues);
上述代码会产生编译错误,因为A, B, C 并不是 Enums 的实例。Enums仅仅是一个包含这些枚举类的类,而枚举类之间并没有继承关系。
解决这个问题的关键在于定义一个公共接口,并让所有枚举类实现该接口。这样,我们就可以创建一个类型为该接口的列表,并将不同枚举类型的值添加到该列表中。
public interface CourseValue {}public class Enums {
public enum A implements CourseValue {
A1,
A2;
}
public enum B implements CourseValue {
B1,
B2;
}
public enum C implements CourseValue {
C1,
C2;
}
}import java.util.Arrays;
import java.util.List;
public class Course {
private List<CourseValue> values;
public Course(CourseValue... courses) {
this.values = Arrays.asList(courses);
}
public List<CourseValue> getValues() {
return values;
}
public static void main(String[] args) {
Course course = new Course(Enums.A.A1, Enums.B.B2, Enums.C.C1);
List<CourseValue> values = course.getValues();
for (CourseValue value : values) {
System.out.println(value);
}
}
}Course course = new Course(Enums.A.A1, Enums.B.B2, Enums.C.C1);
现在,我们可以成功地将不同枚举类型的值传递给Course构造函数,并创建一个Course对象。
import java.util.Arrays;
import java.util.List;
public interface CourseValue {}
public class Enums {
public enum A implements CourseValue {
A1,
A2;
}
public enum B implements CourseValue {
B1,
B2;
}
public enum C implements CourseValue {
C1,
C2;
}
}
public class Course {
private List<CourseValue> values;
public Course(CourseValue... courses) {
this.values = Arrays.asList(courses);
}
public List<CourseValue> getValues() {
return values;
}
public static void main(String[] args) {
Course course = new Course(Enums.A.A1, Enums.B.B2, Enums.C.C1);
List<CourseValue> values = course.getValues();
for (CourseValue value : values) {
System.out.println(value);
}
}
}public sealed interface CourseValue permits Enums.A, Enums.B, Enums.C {}通过定义公共接口,并让枚举类实现该接口,我们可以有效地解决将不同枚举类型的值添加到列表并传递给构造函数的问题。这种方法不仅类型安全,而且代码结构清晰,易于维护。在实际开发中,可以根据具体需求选择合适的接口和实现方式,以达到最佳效果。
以上就是将不同枚举类添加到列表并传递给构造函数的正确方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号