2015-08-27 33 views
5

Java'da, değerlerle birlikte bir POJO sınıfı ayarlamam gerekiyor. Ancak hangi ayar fonksiyonunun kullanılacağına karar vermek için if koşuluna güvenmem gerekiyor. Geçerli kod şu şekilde görünüyor:if/else'den kurtulmak if/else

// Code written in a function which is called within a loop, while parsing xml file. 
if (name.equals("dim1")) { 
    line.setDim1Code(Integer.parseInt(value)); 
} else if (name.equals("dim2")) { 
    line.setDim2Code(Integer.parseInt(value)); 
} else if (name.equals("debitcredit")) { 
    line.setDebitOrCredit(value); 
} else if (name.equals("basevalue")) { 
    line.setBasevalue(Integer.parseInt(value)); 
} else if (name.equals("rate")) { 
    line.setRate(Integer.parseInt(value)); 
} else if (name.equals("value")) { 
    line.setValue(Integer.parseInt(value)); 
} else if (name.equals("description")) { 
    line.setDescription(value); 
} else if (name.equals("vatbasetotal")) { 
    line.setVatBaseTotal(value); 
} else if (name.equals("vattotal")) { 
    line.setVatTotal(value); 
} 

Bu yalnızca bir örnektir, ancak 70 + gibi özellikler ayarlanacaktır. Kodum çalışıyor, ama bir şey yapmanın doğru yolu olup olmadığını merak ediyorum. AFAIK, bu kod, en iyi uygulamaların kodlanmasına aykırıdır. Java'da bu kodu nasıl optimize edebiliriz? Böyle bir kodla uğraşmak için Java'nın en iyi uygulaması nedir?

+3

'Switch case' kullanabilirsiniz! –

+8

Doğru bir şekilde anlıyorsam, kodunuz, XML verilerinin, her düğüm/özellik için bir koşulla satır satır satır satırını manüel olarak POJO'ya seri hale getirmektir. Bununla çok daha büyük bir yanlışlık var, sadece büyük de olsa. Jackson gibi yüksek seviyeli bir seri hale getirme çerçevesi bulmanın daha iyi olduğunu söyleyebilirim ve bunun çoğunu yeniden yaz. – Mena

+0

Sorunumu çözüyorsa. Anahtar, eğer varsa aynı probleme sahip olacaktır. Kod hala çirkin görünecek. –

cevap

5

Sonra

nesne görünüyor (Ben sadece JSON bugüne kadar ayrıştırma am) Bunun gibi:

@XmlAccessorType(XmlAccessType.FIELD) 
    public class Employee 
    { 
     @XmlAttribute 
     @XmlID 
     protected String id; 

     @XmlAttribute 
     protected String name; 

     @XmlIDREF 
     protected Employee manager; 

     @XmlElement(name="report") 
     @XmlIDREF 
     protected List<Employee> reports; 

     public Employee() { 
      reports = new ArrayList<Employee>(); 
     } 
    } 
1

Java Bağlamı için XML Mimarisini (JAXB), here deneyebilirsiniz. yani:

Aslında Jackson gibi bazı kütüphane tarafından ek açıklamaları üzerine otomatik olarak yapılır dayalı olmalıdır şey 2.0+ veya benzeri bir şeydir
File file = new File("C:\\file.xml"); 
    JAXBContext jaxbContext = JAXBContext.newInstance(Pojo.class); 

    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
    Pojo pojo= (Pojo) jaxbUnmarshaller.unmarshal(file); 
0

Her özellik için ayrı bir alan ve ayarlayıcı olmak yerine, tüm özelliklerinizi tutacak bir sözlük oluşturun. How do you create a dictionary? kodu Borçlanma:

private Map<String, String> properties; 

// Constructor 
public MyClass() { 
    properties = new HashMap<String, String>(); 
} 

// Setter 
public string setProperty(String name, String value) { 
    properties.put(name, value); 
} 

// Getter 
public string getProperty(String name) { 
    return properties.get(name); // May return null. You may want to handle that. 
} 

Şimdi özelliklerin tümünü 70+ tek alıcı ve ayarlayıcı var. Hiçbir dev yok-else veya anahtar blok.

Bir sözlükle, özelliklerin sağladığı sözleşmelerin bazılarını kaybedersiniz. Örneğin, varolmaması gereken sözlüğe bir özellik ekleyebilirim. Bu kısıtlamaları kendiniz uygulayabilirsiniz (örneğin, izin verilen özelliklerin bir listesini oluşturarak ve listede olmayan herhangi bir özelliği reddetmeyi reddederek).

İlgili konular