2013-05-25 49 views
1

如何限制只使用一个THUMNAIL?这意味着如果开发人员使用THUMNAIL_MID和THUMBNAIL,它应该抛出编译错误,以便开发人员知道只能使用一个THUMNAIL常量。如何限制某些类型的枚举?

不允许

ImageSize[] imageArray = {ImageSize.A4,ImageSize.THUMBNAIL_MID,ImageSize.THUMBNAIL} ; 

允许

ImageSize[] imageArray = {ImageSize.A4,ImageSize.THUMBNAIL_MID} ; 

ENUM代码

public enum ImageSize 
    { 
     THUMBNAIL(50, 50, "t"), PASSPORT(200, 200, "p"), SMALL(240, 135, "s"), MEDIUM(
       480, 270, "m"), LARGE(960, 540, "l"), A4(800, 600, "a4"),THUMBNAIL_MID(120,155,"t"); 
     /** 
     * The width of the image in pixels 
     */ 
     private final int width; 
     /** 
     * The height of the image in pixels 
     */ 
     private final int height; 
     /** 
     * The image size type 
     */ 
     private final String type; 

     ImageSize(int width, int height, String type) 
     { 
      this.width = width; 
      this.height = height; 
      this.type = type; 
     } 

     public int getWidth() 
     { 
      return width; 
     } 

     public int getHeight() 
     { 
      return height; 
     } 

     public String getType() 
     { 
      return type; 
     } 

     public static ImageSize getImageSizeByType(String type) 
     { 
      if (type != null) 
      { 
       if (type.equalsIgnoreCase(THUMBNAIL.getType())) 
       { 
        return THUMBNAIL; 
       } 
       if (type.equalsIgnoreCase(PASSPORT.getType())) 
       { 
        return PASSPORT; 
       } 
       if (type.equalsIgnoreCase(SMALL.getType())) 
       { 
        return SMALL; 
       } 
       if (type.equalsIgnoreCase(MEDIUM.getType())) 
       { 
        return MEDIUM; 
       } 
       if (type.equalsIgnoreCase(LARGE.getType())) 
       { 
        return LARGE; 
       } 
       if (type.equalsIgnoreCase(THUMBNAIL_MID.getType())) 
       { 
        return THUMBNAIL_MID; 
       } 
      } 
      return null; 
     } 
    } 

} 
+2

我很确定你不能。但是你可以将你的代码封装在一个方法中,该方法返回一个带'THUMNAIL_MID'或'THUMBNAIL'的ImageSize'数组,并且像这样控制代码。 – rath

回答

0

我会建议建立一个NE w enum。新的枚举可以包含一个单独的字段 - 对旧枚举的引用。您可以在与您希望允许的旧枚举值相对应的新枚举中创建值。

然后在您的代码中,使用新的枚举类型(在适当的情况下)。我假设使用新的枚举类型总是合适的,你可以刚刚删除额外的枚举类型。

我使用了名称AllowableImageSize,因为我不熟悉上下文。您应该选择一个更好的名称(例如,ThumbnailImageSize,PassportImageSize,LinkImageSize等)。

您并不局限于创建一个新的枚举。根据您的需要,您可以拥有指向ImageSize不同子集的ThumbnailImageSize和PassportImageSize。

我在ideone上创建了示例代码。

class Main 
{ 
     public static void main (String [ ] args) 
     { 
     } 
} 


enum AllowableImageSize 
{ 
     THUMBNAIL_MID(ImageSize.THUMBNAIL_MID), THUMBNAIL(ImageSize.THUMBNAIL); 

     public final ImageSize imageSize; 

     AllowableImageSize(ImageSize imageSize) 
     { 
       this.imageSize=imageSize; 
     } 
} 

    enum ImageSize 
    { 
     THUMBNAIL(50, 50, "t"), PASSPORT(200, 200, "p"), SMALL(240, 135, "s"), MEDIUM(
       480, 270, "m"), LARGE(960, 540, "l"), A4(800, 600, "a4"),THUMBNAIL_MID(120,155,"t"); 
     /** 
     * The width of the image in pixels 
     */ 
     private final int width; 
     /** 
     * The height of the image in pixels 
     */ 
     private final int height; 
     /** 
     * The image size type 
     */ 
     private final String type; 

     ImageSize(int width, int height, String type) 
     { 
      this.width = width; 
      this.height = height; 
      this.type = type; 
     } 

     public int getWidth() 
     { 
      return width; 
     } 

     public int getHeight() 
     { 
      return height; 
     } 

     public String getType() 
     { 
      return type; 
     } 

     public static ImageSize getImageSizeByType(String type) 
     { 
      if (type != null) 
      { 
       if (type.equalsIgnoreCase(THUMBNAIL.getType())) 
       { 
        return THUMBNAIL; 
       } 
       if (type.equalsIgnoreCase(PASSPORT.getType())) 
       { 
        return PASSPORT; 
       } 
       if (type.equalsIgnoreCase(SMALL.getType())) 
       { 
        return SMALL; 
       } 
       if (type.equalsIgnoreCase(MEDIUM.getType())) 
       { 
        return MEDIUM; 
       } 
       if (type.equalsIgnoreCase(LARGE.getType())) 
       { 
        return LARGE; 
       } 
       if (type.equalsIgnoreCase(THUMBNAIL_MID.getType())) 
       { 
        return THUMBNAIL_MID; 
       } 
      } 
      return null; 
     } 
    } 
+0

所以现在如果我写ImageSize [] imageArray = {ImageSize.A4,ImageSize.THUMBNAIL_MID,ImageSize.THUMBNAIL};会发生什么? – user1595858

+0

这是允许的,但你应该做的AllowableImageSize [] imageArray = {AllowableImageSize.A4,AllowableImageSize.THUMBNAIL_MID,AllowableImageSize.THUMBNAIL}编译器将拒绝 – emory