聊一聊Java中的枚举和泛型(两种强大的编程特性)
保持热爱,奔赴山海。。。。。。
Java中的枚举
在Java中,枚举(Enum)是一种特殊的数据类型,用于定义包含固定常量集合的数据类型。枚举类型在Java中引入了更强大、更类型安全的常量集合,提高了代码的可读性和可维护性。
以下是关于Java中枚举的一些基本概念和用法:
1. 定义枚举类型
要定义一个枚举类型,可以使用 enum
关键字:
enum Days {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
2. 枚举常量
枚举常量是枚举类型的具体值。在上面的例子中,SUNDAY
, MONDAY
, 等就是 Days
枚举的常量。
3. 枚举方法
枚举类型可以包含方法,以便对枚举常量执行特定操作。每个枚举常量都是枚举类型的实例,并且可以有自己的属性和方法。例如:
enum Days {
SUNDAY("Sun"), MONDAY("Mon"), TUESDAY("Tue"), WEDNESDAY("Wed"),
THURSDAY("Thu"), FRIDAY("Fri"), SATURDAY("Sat");
private String abbreviation;
// 构造方法
private Days(String abbreviation) {
this.abbreviation = abbreviation;
}
// 获取缩写
public String getAbbreviation() {
return abbreviation;
}
}
4. Switch 语句中使用枚举
枚举类型非常适合在 switch
语句中使用,使得代码更为清晰和易读:
Days day = Days.MONDAY;
switch (day) {
case SUNDAY:
System.out.println("It's a relaxing day!");
break;
case MONDAY:
System.out.println("Back to work!");
break;
// 其他枚举常量的处理...
default:
System.out.println("Enjoy the day!");
}
5. 枚举的遍历
可以使用 values()
方法获取枚举类型中所有的常量,并进行遍历:
for (Days day : Days.values()) {
System.out.println(day);
}
6. 枚举实现接口
枚举类型也可以实现接口,为每个枚举常量提供不同的行为。
interface DayInfo {
String getInfo();
}
enum Days implements DayInfo {
SUNDAY("Sun"), MONDAY("Mon"), TUESDAY("Tue"), WEDNESDAY("Wed"),
THURSDAY("Thu"), FRIDAY("Fri"), SATURDAY("Sat");
private String abbreviation;
// 构造方法
private Days(String abbreviation) {
this.abbreviation = abbreviation;
}
// 获取缩写
public String getAbbreviation() {
return abbreviation;
}
// 实现接口方法
@Override
public String getInfo() {
return "This day is " + name() + " (" + getAbbreviation() + ")";
}
}
这是关于Java中枚举的一些基本概念和用法。枚举是一种强大而灵活的工具,可以用于增强代码的可读性和可维护性。
Java中的泛型
Java 中的泛型是一种强大的编程特性,允许你编写可以适用于多种数据类型的通用代码,提高了代码的可重用性和类型安全性。泛型在集合类、方法和类中广泛应用,使得代码更加灵活和类型安全。
以下是一些关于 Java 泛型的基本概念和用法:
1. 泛型类
使用泛型可以创建具有通用数据类型的类。例如,下面是一个简单的泛型类:
public class Box<T> {
private T value;
public Box(T value) {
this.value = value;
}
public T getValue() {
return value;
}
}
在这个例子中,Box
类是一个泛型类,使用 <T>
表示类型参数。通过这个参数,可以在实例化 Box
对象时指定具体的数据类型:
Box<Integer> intBox = new Box<>(42);
Box<String> strBox = new Box<>("Hello, Generics!");
Integer intValue = intBox.getValue();
String strValue = strBox.getValue();
2. 泛型方法
除了泛型类,还可以在方法中使用泛型。例如,下面是一个简单的泛型方法:
public class GenericMethods {
public static <T> void printArray(T[] array) {
for (T element : array) {
System.out.print(element + " ");
}
System.out.println();
}
}
这个方法可以打印任意类型的数组。调用时,编译器会根据传递的参数类型进行类型推断:
Integer[] intArray = {1, 2, 3, 4, 5};
String[] strArray = {"apple", "banana", "orange"};
GenericMethods.printArray(intArray); // 输出: 1 2 3 4 5
GenericMethods.printArray(strArray); // 输出: apple banana orange
3. 通配符
通配符是一种用于表示未知类型的符号。在泛型中,通配符通常用 ?
表示。例如,List<?>
表示一个元素类型未知的列表:
List<?> unknownList;
通配符也可以用于上界和下界。例如,List<? extends Number>
表示一个元素类型是 Number
或其子类的列表,而 List<? super Integer>
表示一个元素类型是 Integer
或其父类的列表。
4. 泛型限定
泛型可以使用限定来指定泛型的边界。通常有两种限定:上界限定和下界限定。上界限定使用 extends
关键字,下界限定使用 super
关键字。
// 上界限定:T 可以是 Number 或其子类
public <T extends Number> void processNumber(T number) {
// 处理 T 类型的数据
}
// 下界限定:T 可以是 Integer 或其父类
public <T super Integer> void processInteger(T number) {
// 处理 T 类型的数据
}
这些是 Java 中泛型的一些基本概念和用法。泛型是一种强大的工具,可以提高代码的可读性和灵活性,并在编译时提供更好的类型检查。