Vra

Byvoorbeeld, ek het'n paar klasse met verskeie velde, een van hulle hieronder, ek wil om te uitset al die velde van die geval, egter, moet ek kry die kartering tussen die lid se naam met lucky metodes, kan ek dit kry deur refleksie ?

public class MappingMemberWithGetterOrSetter {
private String memberOne;
private int memberTwo;

public String getMemberOne() {
    return memberOne;
}

public void setMemberOne(String memberOne) {
    this.memberOne = memberOne;
}

public int getMemberTwo() {
    return memberTwo;
}

public void setMemberTwo(int memberTwo) {
    this.memberTwo = memberTwo;
}
}
Was dit nuttig?

Oplossing

Miskien is dit wat u wil hê. Met die Introspektor jy kan die Beaninfo En dit gee jou toegang tot die boontjies PropertyScriptors.

BeanInfo beanInfo = Introspector.getBeanInfo(MappingMemberWithGetterOrSetter.class, Object.class);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
    String propertyName = propertyDescriptor.getName();
    Method getter = propertyDescriptor.getReadMethod();
    Method setter = propertyDescriptor.getWriteMethod();
    Field field = MappingMemberWithGetterOrSetter.class
                .getDeclaredField(propertyName);
    System.out.println("Property " + propertyName + " field:  " + field);
    System.out.println("Getter " + getter);
    System.out.println("Setter " + setter);
}

Ander wenke

Is dit wat u wil hê?

Class aClass = ...//obtain class object
Field[] methods = aClass.getFields(); 

Field field = ... //obtain field object
String fieldName = field.getName();

Daarna kan u toegang tot Getter en Setter of the Field via

Object value = field.get(objectInstance);

field.set(objetInstance, value);

Waar ObjectInstance 'n voorbeeld is van die klas wat die veld besit.

'n eiendom in Java is gedefinieer deur getter en/of setter.As jy het'n getLength metode sonder parameter en met'n terugkeer waarde, dan is jy het'n leesbare eiendom naam length.As jy het'n metode genoem setLength(Type value) dan het jy'n skryfbare eiendom genoem length.As jy beide dan die eiendom is beide leesbare en skryfbare.

Velde wat nie betrokke is in die definisie van'n Java eiendom.Hoe en as jy terug jou eienskappe met velde is aan jou.

public long getDoubleLength() { return getLength()*2; }

maak'n lees-alleen eiendom van die naam doubleLength.Geen veld bestaan vir hierdie eiendom.

So, wat jy wil hê, is nie moontlik nie in die algemeen.As jy wil om dit te doen vir die spesifieke eie klasse waar jy weet dit kartering bestaan of as jy wil om te toets ander klasse vir hierdie patroon, dan kan jy kry metodes en velde via besinning en kyk of velde met die eiendom name bestaan.

Maar dit kan nie werk nie al die tyd.Sommige mense gebruik konvensies soos _member of mField vir die veld name.Hierdie is heeltemal op gelyke voet met die Java-Bone definisie waar eiendomme word gedefinieer deur getters en etters maar sal breek met die naïewe benadering van die wat ooreenstem met die name.

public void getMethods(Class<?> className)
{                   
         Method[] methods = className.getMethods();             
         for(Method method : methods)
            {
           if(method.getDeclaringClass().getName().equalsIgnoreCase("java.lang.Object") )
             {
                 //Do nothing
             }
             else
             {
                if(StringUtils.startsWith( method.getName(),"get"))
                    {   
                        //Here u ll get all get methods                         
                    }
             }                              
}
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top