hadoop中FsAction的实现总结

本文详细介绍了Java中FsAction枚举类的实现原理,包括其如何利用枚举变量的ordinal字段进行权限操作,如按位与、按位或等,并通过实例展示了FsAction的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java中enmu类的ordinal字段记录了各个枚举变量的索引值,
FsAction类中的各个变量的利用了上述的索引值的定义,即二进制位:
000,001,010,011,100,101,110,111,即FsAction中各个枚举值的顺序是不能乱动的。
因此FsAction中的implies方法能够用按位与的方法得以实现。

package org.apache.hadoop.fs.permission;

/**
 * File system actions, e.g. read, write, etc.
 */
public enum FsAction {
  // POSIX style
  NONE("---"),
  EXECUTE("--x"),
  WRITE("-w-"),
  WRITE_EXECUTE("-wx"),
  READ("r--"),
  READ_EXECUTE("r-x"),
  READ_WRITE("rw-"),
  ALL("rwx");

  /** Retain reference to value array. */
  private final static FsAction[] vals = values();

  /** Symbolic representation */
  public final String SYMBOL;

  private FsAction(String s) {
    SYMBOL = s;
  }

  /**
   * Return true if this action implies that action.
   * @param that
   */
  public boolean implies(FsAction that) {
    if (that != null) {
      return (ordinal() & that.ordinal()) == that.ordinal();
    }
    return false;
  }

  /** AND operation. */
  public FsAction and(FsAction that) {
    return vals[ordinal() & that.ordinal()];
  }
  /** OR operation. */
  public FsAction or(FsAction that) {
    return vals[ordinal() | that.ordinal()];
  }
  /** NOT operation. */
  public FsAction not() {
    return vals[7 - ordinal()];
  }

    public static void main(String[] args) {
        FsAction all = FsAction.ALL;
        System.out.println(all);
        System.out.println(all.ordinal());
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值