2017-11-01 393 views
8

Ben iki işlev aynı benzer ama iki kullanılan sınıf nesnesi, böyle benzer farklı bir senaryo yaşıyorum için, aynı işlevselliği

public int function1(inputObject input){ 
    LeadMaster lead= input.getLeadMaster(); 
    PropertyUtils.setProperty(lead, input.getKey(), input.getValue()); 
    return 0; 
} 

Ve benzer başka fonksiyonu gibi Jenerik Type kullanımı

public int function2(inputObject input){ 
    DealMaster deal= input.getDealMaster(); 
    PropertyUtils.setProperty(deal, input.getKey(), input.getValue()); 
    return 0; 
} 

Yukarıdaki nesnede ana nesne için genel sınıfı nasıl kullanabilirim? Henüz jenerik kullanmamıştım.

+1

tanımlanan. Bazı "genel" özellikleri tanımlayan bazı temel arayüzleri/sınıfları tanımlayamıyor musunuz? En kötü durum sadece Object'i burada kullanabilirsiniz. – GhostCat

+0

Teşekkür ederim @GhostCat. Lutfen, lütfen LeadMaster ve DealMaster için bir jenerik özelliği nasıl tanımlarım, örnek bir – AJN

cevap

6

Eğer inputObject sınıfın herhangi bir özelliğiyle çalışmak için yöntem isterseniz, verilen gerekli özelliğini döndüren bir işlevsel arayüzü geçebilir inputObject örneği:

public <T> int function(inputObject input, Function<inputObject,T> func) { 
    T obj = func.apply(input); 
    PropertyUtils.setProperty(obj, input.getKey(), input.getValue()); 
    return 0; 
} 

Şimdi

function(input,inputObject::getLeadMaster); 
ile bu yöntemi çağırabilirsiniz

veya

function(input,inputObject::getDealMaster); 
+0

oh lanet - kesinlikle evet :) – Eugene

+0

Teşekkür ederim @Eran. Sadece aynı şeyi arıyordum. – AJN

+0

"LeadMaster" ve "DealMaster" ortak bir arabirimi paylaşmazsa, 'PropertyUtils.setProperty' yönteminin nasıl çalışacağını görmek ilginç olurdu. – CKing

0

basitçe Eğer yöntemini yeniden tanımlayabiliriz:

public int function1(inputObject input, boolean lead){ 
    if(lead) { 
     LeadMaster lead= input.getLeadMaster(); 
     PropertyUtils.setProperty(lead, input.getKey(), input.getValue());  
    } else { 
     DealMaster deal= input.getDealMaster(); 
     PropertyUtils.setProperty(deal, input.getKey(), input.getValue()); 
    } 
    return 0; 
} 
+0

Teşekkür ederim. Ama benim uygulamada çok fazla ana nesnem var. Bu yüzden daha genel bir çözüm düşünmekteydim. Cevap için teşekkür ederim. – AJN

0

İlk değişiklik inputObject. Yazma yöntemleri input.getMaster (Nesne nesnesi) input.setMaster (Object nesnesi) genel nesneleri ayarlar ve alır. LeadMaster ve DealMaster'u her ikisine de genel olarak ayarlayabilirsiniz.

Soyut bir sınıf yazın veya her iki sınıfa da genişletilmiş bir üst sınıf kullanın veya function1 ve function2. o soyut ya da süper sınıf kullanımı jenerik yöntem içinde sen Mutlaka burada Generics'i gerekmez inputObject

public int function(inputObject input){ 
    PropertyUtils.setProperty(input.getMaster, input.getKey(), input.getValue()); 
    return 0; 
}