java之enclosing class

今天看Spring boot 源码时,获取类上注解信息时用到了Class.getEnclosingClass进行一些逻辑判断。一直没注意这个,于是好好了解了一下。下面将详细讲解一下

首先,类分为五种:

(1)顶层类

(2)静态嵌套类

(3)内部类(非静态的嵌套类)

(4)局部类(方法中定义的类)

(5)匿名类

下面通过一段代码来详细说明

package com.mall.pkgscan1.bean;

/**
 * @since 2024/12/1 9:29
 */
// 顶层类
public class UserInfo {
    // 嵌套类
    static class FemaleUser {

    }
    
    // 内部类
    class UserBaseInfo {

    }

    public static void main(String[] args) {
        UserInfo userInfo = new UserInfo();
        // 匿名类
        UserInfo anonymousUser = new UserInfo() {
        };
        System.out.println("UserInfo.enclosingClass:" + UserInfo.class.getEnclosingClass());
        System.out.println("FemaleUser.enclosingClass:" + FemaleUser.class.getEnclosingClass());
        System.out.println("UserBaseInfo.enclosingClass:" + UserBaseInfo.class.getEnclosingClass());
        System.out.println("anonymousUser.enclosingClass:" + anonymousUser.getClass().getEnclosingClass());
        userInfo.showUserInfo();
    }

    public void showUserInfo() {
        // 局部类
        class NameInfo {

        }
        System.out.println("NameInfo.enclosingClass:" + NameInfo.class.getEnclosingClass());
    }
}

上面定义了五种类型的类,并打印它的enclosingClass。结果如下:

可以看到除了顶层类的enclosingClass是null以外,其他的都是UserInfo。所以我们现在应该就能猜到getEnclosingClass是获取它的外围类,Enclosing Class确实也是外围类的意思。

这里在延伸一下,如果在嵌套类中再定义一个内部类,那么这个内部类的外围类是嵌套类还是顶层类呢?答案是嵌套类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值