Java - shift int enums

In C, I sometimes used structures like

enum {
   UIViewAutoresizingNone                 = 0,
   UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
   UIViewAutoresizingFlexibleWidth        = 1 << 1,
   UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
   UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
   UIViewAutoresizingFlexibleHeight       = 1 << 4,
   UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};
typedef NSUInteger UIViewAutoresizing;

Is there any Java equivalent?

+5
source share
8 answers

Use EnumSet .

Excerpt from the link above, which corresponds to the example:

package resolver;

import java.util.EnumSet;

public class EnumPatternExample {

    public enum Style {
        BOLD, ITALIC, UNDERLINE, STRIKETHROUGH
    }

    public static void main(String[] args) {
        final EnumSet<Style> styles = EnumSet.noneOf(Style.class);
        styles.addAll(EnumSet.range(Style.BOLD, Style.STRIKETHROUGH)); // enable all constants
        styles.removeAll(EnumSet.of(Style.UNDERLINE, Style.STRIKETHROUGH)); // disable a couple
        assert EnumSet.of(Style.BOLD, Style.ITALIC).equals(styles); // check set contents are correct
        System.out.println(styles);
    }

}
+15
source

You no longer need this binary logic with enums in java. You just need enumand EnumSet.

For instance:

enum Color {
   Red, Green, Blue, Orange, White, Black
}

...

EnumSet<Color> mainColors = EnumSet.of(Color.Red, Color.Green, Color.Blue);
Color color = getSomeColor();
if (mainColors.contains(color)) {
   //mainColors is like Red | Green | Blue, 
   //and contains() is like color & mainColors
   System.out.println("Your color is either red or blue or green"); 
}
+5
source

, C-, Java:

enum UIView {
    UIViewAutoresizingNone                 ( 0),
    UIViewAutoresizingFlexibleLeftMargin   ( 1 << 0),
    UIViewAutoresizingFlexibleWidth        ( 1 << 1),
    UIViewAutoresizingFlexibleRightMargin  ( 1 << 2),
    UIViewAutoresizingFlexibleTopMargin    ( 1 << 3),
    UIViewAutoresizingFlexibleHeight       ( 1 << 4),
    UIViewAutoresizingFlexibleBottomMargin ( 1 << 5);
    private final int value;

    private UIView(int value){
        this.value = value;}

    public int getValue(){
        return value;
    }
 };
+3

- :

enum EnumTest {
    ONE(1), //Specify value to pass to constructor
    TWO(2),
    THREE(3);

    private int num;

    private EnumTest(int num) { //Enum constructor must be private
        this.num = num;
    }

    public int getNum() { //Get the value specified on the constant creation
        return num;
    }
}

getNum() , , . Java, - , ( ).

0

:

enum MyEnum {
       UIViewAutoresizingNone(0),
       UIViewAutoresizingFlexibleLeftMargin(1),
       UIViewAutoresizingFlexibleWidth(2),
       UIViewAutoresizingFlexibleRightMargin(3),
       UIViewAutoresizingFlexibleTopMargin(4),
       UIViewAutoresizingFlexibleHeight(5),
       UIViewAutoresizingFlexibleBottomMargin(6);

       private int value;

       private MyEnum(int value) {
           this.value = value;
       }

       public int getValue() {
           return value;
       }
    };
0

Google " Java", , . Java, , , .. , Java.

public enum UIViewAutoresizingConstants
{
    UIViewAutoresizingNone(0),
    UIViewAutoresizingFlexibleLeftMargin(1 << 0);

    private int value;

    private UIViewAutoresizingConstants(int v)
    {
        this.value = v;
    }
}
0

. Java :

public enum UIViewAutoresizing {
    None(0),
    FlexibleLeftMargin(1 << 0),
    FlexibleWidth(1 << 1),
    FlexibleRightMargin(1 << 2),
    FlexibleTopMargin(1 << 3),
    FlexibleHeight(1 << 4),
    FlexibleBottomMargin(1 << 5);

    private final int flag;

    private MessageType(int flag) {
        this.flag = flag;
    }

    public int flag() {
        return flag;
    }
};

() . , - .

0

Java Emun , - :

public enum Classname {
   UIViewAutoresizingNone( 0 ),
   UIViewAutoresizingFlexibleLeftMargin ( 1 << 0 ),
   UIViewAutoresizingFlexibleWidth( 1 << 1 ),
   UIViewAutoresizingFlexibleRightMargin( 1 << 2 ),
   UIViewAutoresizingFlexibleTopMargin( 1 << 3 ),
   UIViewAutoresizingFlexibleHeight( 1 << 4),
   UIViewAutoresizingFlexibleBottomMargin( 1 << 5 ),

    private final double value;

    // constructor
    private Classname( double v ) {
        this.value = v;
    }

    public double value()   { 
        return value; 
    }
 }

:

double x = Classname.UIViewAutoresizingNone.value;

, , , , . Java . , :

public enum Classname {
   UIViewAutoresizingNone,
   UIViewAutoresizingFlexibleLeftMargin,
   UIViewAutoresizingFlexibleWidth,
   ....
0

All Articles