2013-04-16 2 views
5

자바 열거 형에 함수가있을 수 있다면 혼란 스럽습니다. 간단한 HTML 편집기를 만들고 html 태그를 표현하기 위해 열거 형을 사용하고 싶습니다. 예를 들어 이것이 가장 좋은 방법은 아니라는 것을 알지만 내 그룹은이를 구현하기로 결정했습니다.열거 형의 메소드

그래서 이런 식으로하려고했지만 TagEnums.normalTags() 정적 메서드 만들기를 제안하려고 할 때이 메서드가 올바른지 또는 대신 구현하는 것이 더 쉬운 것인지 궁금합니다. public static ArrayList<String> normalTags()

public enum TagEnum { 
    H1, H2, H3, H4, H5, H6, P, B, I, U, BR, HR, RP, RT, RUBY 

    public ArrayList<String> normalTags(){ 
     String normalTags = "H1, H2, H3, H4, H5, H6, P, B, I, U"; 
     ArrayList<String> tags = new ArrayList<String>(); 
     for(Enum<?> currentEnum: TagEnum.values()){ 
      if(normalTags.contains(currentEnum.toString())){ 
       tags.add("<"+currentEnum.toString().toLowerCase()+">"); 
       tags.add("</"+currentEnum.toString().toLowerCase()+">"); 
      } 
     } 
     return tags; 
    } 
} 
+0

그것은 당신이 내가 Eclipse를 추측하고있어 "는 제안"말할 때입니다 :) 방식 괜찮아요. 이클립스의 제안은 때로는 어리석은 다른 때가있다. 당신이 묻기로 결심 한 좋은 일! – slezica

+2

추상 메서드를 만들고 각 열거 형에 대해이를 재정의 할 수도 있습니다! 이 질문을 참조하십시오 : http://stackoverflow.com/questions/14850842/overriding-abstract-method-or-using-one-single-method-in-enums –

+2

@ uʍopǝpısdn 나는 그 제안이 의미가 있다고 생각합니다 - 그 방법의 구현은 ' 특정 enum 상수에 특정한 t. 모든 열거 형 값을 사용하여 정적으로 작업합니다. –

답변

5

예에 공공 ArrayList<String> normalTags()를 만드는 자바 열거 함수를 가질 수 있습니다. 이 페이지에서

http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

예 :

public enum Planet { 
    MERCURY (3.303e+23, 2.4397e6), 
    VENUS (4.869e+24, 6.0518e6), 
    EARTH (5.976e+24, 6.37814e6), 
    MARS (6.421e+23, 3.3972e6), 
    JUPITER (1.9e+27, 7.1492e7), 
    SATURN (5.688e+26, 6.0268e7), 
    URANUS (8.686e+25, 2.5559e7), 
    NEPTUNE (1.024e+26, 2.4746e7); 

    private final double mass; // in kilograms 
    private final double radius; // in meters 
    Planet(double mass, double radius) { 
     this.mass = mass; 
     this.radius = radius; 
    } 
    private double mass() { return mass; } 
    private double radius() { return radius; } 

    // universal gravitational constant (m3 kg-1 s-2) 
    public static final double G = 6.67300E-11; 

    double surfaceGravity() { 
     return G * mass/(radius * radius); 
    } 
    double surfaceWeight(double otherMass) { 
     return otherMass * surfaceGravity(); 
    } 
    public static void main(String[] args) { 
     if (args.length != 1) { 
      System.err.println("Usage: java Planet <earth_weight>"); 
      System.exit(-1); 
     } 
     double earthWeight = Double.parseDouble(args[0]); 
     double mass = earthWeight/EARTH.surfaceGravity(); 
     for (Planet p : Planet.values()) 
      System.out.printf("Your weight on %s is %f%n", 
          p, p.surfaceWeight(mass)); 
    } 
} 
+0

나는 이것을 온라인으로 보았습니다. 그러나 필요한 경우 다른 클래스에 액세스가 필요한지 확실하지 않았습니다. private –

+0

대신 Public 메소드가 될 것 @Thole Paul 메소드는 구현의 세부 사항 인 내부 메소드이거나 계약의 세부 사항이 아니거나 객체의 사용자 관점에서 객체가 무엇인지 개인적인 것이어야합니다. 메소드는 오브젝트가 사용되는 것을 정의 할 경우 공개되어야합니다. – Patashu