Ben
Ben

Reputation: 62366

How should I store this data in a Java enum?

What's the best way to store this data in a Java enum?

<select>
    <option></option>
    <option>Recommend eDelivery</option>
    <option>Require eDelivery</option>
    <option>Require eDelivery unless justification provided</option>
</select>

I'm new to java and have tried things like

public enum Paperless { 
      "None" = null,
      "Recommend eDelivery" = "Recommend eDelivery",
      "Require eDelivery" = "Require eDelivery",
      "Require eDelivery unless justification provided" = "Require eDelivery w/out justification"
}

But this doesn't work. I'm considering the possibility of storing a text value that summarizes the option that the user sees on this web page.

Upvotes: 6

Views: 21411

Answers (7)

A Null Pointer
A Null Pointer

Reputation: 2277

    public enum Paperless {
        NONE("None"),
        RECOMMEND("Recommend eDelivery"),
        REQUIRE("Require eDelivery"),
        REQUIRE_UNLESS("Require eDelivery unless justification provided"),;

     private String value;
     private Paperless(String value){
         this.value=value;
     }

     public String getValue(){
         return this.value;
     }

   }

Upvotes: 0

jhenderson2099
jhenderson2099

Reputation: 964

You can't assign strings to enum values in Java in the way that you are trying.

The way to do it would be:

public enum Paperless { 
      None(null), 
      RecommendedDelivery("Recommended Delivery"), 
      RequireEDelivery("Require eDelivery"), 
      RequireEDeliveryUnlessJustification("Require eDelivery unless justification provided");

      private final String value;   

      Paperless(String value) {
        this.value = value;
      }

      private String enumValue() { return value; }

      public static void main(String[] args) {
        for (Paperless p : Paperless.values())
           System.out.println("Enum:" + p + "; Value:" + p.enumValue());
      }
}

Upvotes: 1

Robin
Robin

Reputation: 36601

Take a look at the enum tutorial, more specifically the Planet example. You can do the same, e.g.

public enum Paperless{
  NONE( null ),
  RECOMMENDED_DELIVERY( "Recommended delivery" ),
  ...//put here the other values
  REQUIRED_DELIVERY( "Required delivery" );
  private String name;
  Paperless( String name ){
    this.name = name;
  }
  public String getName(){
    return this.name;
  }
}

Upvotes: 11

GetSet
GetSet

Reputation: 532

Java enums aren't constructed in that way. Check out

Java Tutorials: Enum Types

Java - Convert String to enum: #2

Yours might look something like this:

public enum Paperless {
  NONE(""),
  RECOMMEND("Recommend eDelivery"),
  REQUIRE("Require eDelivery"),
  REQUIRE_UNLESS("Require eDelivery unless justification provided");

  private String text;

  Paperless(String text) {
    this.text = text;
  }

  public String getText() {
    return this.text;
  }
}

Upvotes: 0

anubhava
anubhava

Reputation: 784998

Something like this can work for your case:

public enum PaperLess {
    NONE("none"),
    RECOMMEND("Recommend eDelivery"),
    REQUIRE("Require eDelivery"),
    REQUIRE_JUSTIFIED("Require eDelivery unless justification provided");

    private String value;

    private PaperLess(String value) {
       this.value = value;
    }

    public String getValue() {
       return value;
    }
}

Upvotes: 1

Attila
Attila

Reputation: 28762

The name of the enum must be an identifier (e.g. one-word, not a string)

public enum Paperless {
  None,
  RecommendEDelivery,
  ...
}

You can associate string values with them if you want (although you can get the default too that equals to the identifier name, usign the name() method) by associating a String member with the enum type and providing a custom constructor.

public enum Paperless {
  None("None"),
  RecommendEDelivery("Recommend eDelivery"),
  ...;

  private String myValue;

  private Paperless(String name) {myValue=name;)
}

To access that associated string, you need to provide a public accessor method as well.

Upvotes: 0

Peter Lawrey
Peter Lawrey

Reputation: 533492

You can't have spaces in the names of members and you can't assign enum values, they are objects, not constants.

Upvotes: 0

Related Questions