2013-04-16 23 views
5

Java enum'larında işlevlerin olması durumunda kafam karıştı. Basit bir html editörü yapıyorum ve html etiketlerini temsil etmek için enumları kullanmak istedim, evet bunun bunun için en iyi yol olmadığını biliyorum, ancak grubumun bunu uygulamaya koyma şekli.Enkelerde Yöntemler

Bu yüzden böyle bir şey yapmaya çalışıyorum, ancak TagEnums.normalTags()'u aramaya çalıştığımda, bunu statik bir yöntem haline getirmeyi öneririm, sanırım bunun doğru olup olmadığını veya bunun yerine uygulanmasının daha iyi bir yolu olup olmadığını merak ediyorum 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

Bu Eclipse tahmin ediyorum "o öneriyor" derken o :) olan yolu iyi. Eclipse'nin önerileri bazen iyi, diğer zamanlarda aptaldır. Sormaya karar verdiğiniz iyi şey! – slezica

+2

Her bir enum için soyut yöntemler yapabilir ve bunları geçersiz kılabilirsiniz! Bu soruya bakın: http://stackoverflow.com/questions/14850842/overriding-abstract-method-or-using-one-single-method-in-enums –

+2

@ uʍopǝpısdn Bence bu öneri mantıklı geliyor - yöntemin uygulanması değil ' Belirli bir enum sabitine özgüdür. Tüm enum değerlerini kullanarak statik bir şey yapıyor. –

cevap

5

Evet içine kamu ArrayList<String> normalTags() yapma, Java çeteleler işlevlere sahip olabilir. Bu sayfadan

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

Örnek:

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

Bunu çevrimiçi gördüm, ancak gerekirse başka bir sınıfa ihtiyaç duyduğunda emin değildi. Özel yöntemler yerine kamu yöntemleri olabilir. –

+0

@Tall Paul Yöntemler, uygulamanın ayrıntıları değil, nesnenin kullanıcı perspektifinden nesnenin ne olduğu İNSANIN ne olduğunun ayrıntıları olmayan içsel yöntemler ise özel olmalıdır. Yöntemler, nesnenin ne amaçla kullanıldığını/ne sorduğunu tanımlarlarsa halka açık olmalıdır. – Patashu