Map.Entry的访问权限问题

在遍历map的时候使用entrySet(是一个EntrySet类型的对象,此类是HashMap的一个内部类)生成Iterator类对象i1。需要进行一次向下转型,因为Node是一个HashMap访问控制权限为默认的静态内部类,所以不能转成HashMap.Node。

 Set set1 = map.entrySet();
        Iterator i1 = set1.iterator();
        while (i1.hasNext()) {
//            HashMap.Node hn = (HashMap.Node) i1.next();
//            'java.util.HashMap.Node' is not public in 'java.util.HashMap'. 
//            Cannot be accessed from outside package
//            Map.Entry me = (Map.Entry)i1.next();
            Map.Entry me = (Map.Entry)i1.next();
//            从此可以看出.的优先级比小括号高?
            System.out.println(me.getKey() + "-" + me.getValue());

所以需要向下转型成Map.Entry。
因为接口的访问权限和类一样,只有public和默认。我看了Map的源码,Map是public,但是它内部的Entry接口是不带public的,所以有一个困惑,为什么这个默认的Entry能在包外使用?按理说应该要和上面内部类的报错一致才对。
后来进行尝试,其实接口里面定义的接口如果不带public,那么其实它的访问权限就是public,而不是普通的默认。
这一点从如下提示的public对于此接口成员是多余的可以证实。

public interface AAAAA {
    public int a =10;
    public interface AAAAAAA{
//Modifier 'public' is redundant for interface members
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值