随笔 - 402  文章 - 1 评论 - 20 阅读 - 113万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

1、枚举类型

JDK1.5中新增了枚举类型与泛型。

枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中,此外,它还提供了安全检查功能。

枚举类型本质上还是以类的形式存在。

enum是定义枚举类型的关键字。

例如:在项目中创建Constants接口,在接口中定义敞亮的常规方式:

public interface Constants{
    public static final int Constants_A=1;
    public static final int Constants_B=12;
}

新增枚举类型后就逐渐取代了这种常量定义方式,使用枚举类型定义常量的语法如下:

public enum Constants{
    Constants_A,
    Constants_B,
    Constants_C
}

2、泛型

(1)泛型实质上就是使程序员定义安全的类型。

在没有出现泛型之前,Java也提供了对Object的引用“任意化”操作,这种任意化操作就是对Object引用进行“向下转型”及“向上转型”操作,但某些强制类型转换的错误也许不会被编译器捕捉,而在运行后出现异常,可见强制类型转换存在安全隐患,所以再次提供了泛型机制。

例如:在项目中创建Test类,在该类中使基本类型向上转型为Object类型:

复制代码
public class Test {
    private Object b; // 定义Object类型成员变量
    
    public Object getB() { // 设置相应getXXX()方法
        return b;
    }
    
    public void setB(Object b) { // 设置相应setXXX()方法
        this.b = b;
    }
    
    public static void main(String[] args) {
        Test t = new Test();
        t.setB(new Boolean(true)); // 向上转型操作
        System.out.println(t.getB());
        t.setB(new Float(12.3));
Float f
= (Float) (t.getB()); // 向下转型操作 System.out.println(f); } }
复制代码

在本实例中,Test类中定义了私有的成员变量b,它的类型为Object类型,同时为其定义了相应的setXXX()与getXXX()方法,

在类的主方法中,将new Boolean(true)对象作为setB()方法的参数,由于setB()方法的参数类型为Object,这样就实现了“向上转型”操作;

同时在调用getB()方法时,将getB()方法返回的Object对象以相应的类型(这里是Float)返回,这个就是“向下转型”操作。

因为“向上转型”是安全的,而如果进行”向下转型“操作时用错了类型,或者并没有执行该操作,就会出现ClassCastException异常。

(2)定义泛型类

泛型机制的语法如下:

类名<public class OverClass<T> { //定    private T over; // 定义泛型成员变量

复制代码
    
    public T getOver() { // 设置相应getXXX()方法
        return b;
    }
    
    public void setOver(T over) { // 设置相应setXXX()方法
        this.b = b;
    }
    
    public static void main(String[] args) {
        //实例化一个Boolean型的对象
OverClass<Boolean> over1=new OverClass<Boolean>();
//实例化一个Float型对象
OverClass<Float> over2=new OverClass<Float>();

over1.setOver(true)
; //不需要类型转换 over2.setOver(12.3f);


Boolean b=over1.getOver(); //不需要类型转换
Float f=over2.getOver();
System.out.println(b);
System.out.println(f); } }
复制代码

 

posted on   chamie  阅读(1604)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示