"Subset" of Enum Values ​​in Java

I have a Java class that is something like: -

public class Angle
{
    ANGLE_TYPE angleType;

    ANGLE_TYPE defaultAngleType = ANGLE_TYPE.RAD;

    enum ANGLE_TYPE
    {
        DEG, RAD, DEGMIN, DEGMINSEC;
    }
}

The class has an "enumeration", as you can see. My question is about the instance variable, 'defaultAngleType'. I want this to be so that only RAD or DEG values ​​can be assigned to this variable, and also the error be rejected.

Any idea how to achieve this?

+4
source share
6 answers

You can use EnumSet . For example:

Set<ANGLE_TYPE> allowed = EnumSet.of(RAD, DEG);
+7
source

Probably enumnot the best structure for this.

I would take some inheritance based approach.

interface Angle { }
class DegMin implements Angle { }
class DegMinSec implements Angle { }

interface SpecialAngle extends Angle { } 
class Deg implements SpecialAngle { }
class Rag implements SpecialAngle { }

, Angle (s), SpecialAngle (s) (Deg Rad).

:

public class Angle
{
    Angle angleType;

    SpecialAngle defaultAngleType = new Rad();
}

defaultAngleType Rad Deg.

+2

Angle private factory:

private Angle(ANGLE_TYPE type, float value) {
   //...
}

static Angle degrees(float value) {
  return new Angle(ANGLE_TYPE.DEG, value);
}

static Angle radians(float value) {
  return new Angle(ANGLE_TYPE.RAD, value);
}

, , .

, angleType, getter, - .

+1

defaultAngleType . defaultAngleType, - :

public void setDefaultAngleType(ANGLE_TYPE type){
    if(type.equals(DEG) || type.equals(RAD))
        defaultAngleType = type;
    else
        throw new Exception();
}
0

:

, Angle , 4 :

  • ,
  • , ,

2 4 // .

DegreeAngle, Angle, // .

0

EnumSet, , .

public class Angle {

    private ANGLE_TYPE angleType;

    private ANGLE_TYPE defaultAngleType = DEFAULT_ANGLE_TYPE.RAD.angleType;

    enum ANGLE_TYPE {
        DEG, RAD, DEGMIN, DEGMINSEC;
    }

    enum DEFAULT_ANGLE_TYPE {

        DEG(ANGLE_TYPE.DEG),
        RAD(ANGLE_TYPE.RAD);

        private ANGLE_TYPE angleType;

        DEFAULT_ANGLE_TYPE(ANGLE_TYPE angleType) {
            this.angleType = angleType;
        }

    }

    public Angle(ANGLE_TYPE angleType, DEFAULT_ANGLE_TYPE defaultAngleType) {
        this.angleType = angleType;
        this.defaultAngleType = defaultAngleType.angleType;
    }

}
0

Source: https://habr.com/ru/post/1606583/


All Articles