java - How to know that all of the member variables of an instance have not been set? -
let's created instance in java of class person
public class person { private string name; private int age; // lot of other member variables // set here }
how know whether instance @ least have 1 of member variables being set (without checking of variables 1 one?
for example :
person person = new person(); person person1 = new person(); person1.setname("john");
i need know person instance has not set variables. person1 has set @ least 1 variable.
what can think solving
- create boolean flag being changed true in every set method, or
- create method checking variables 1 one.
but wonder if there's way more elegant this.
this 1 way done (not recommended production because doesn't check javabean style variables).
with have call
helper.hassomethingbeensetted
with object parameter.
package com.intellij.generatetestcases.javadoc; import java.lang.*; import java.lang.reflect.*; import java.util.*; import java.util.regex.*; import static com.intellij.generatetestcases.javadoc.person.helper.hassomethingbeensetted; public class person { public string getname() { return name; } public void setname(string name) { this.name = name; } public int getage() { return age; } public void setage(int age) { this.age = age; } private string name; private int age; // lot of other member variables // set here public static void main(java.lang.string[] args) throws invocationtargetexception, illegalaccessexception { person person = new person(); system.out.println("has been set something: " + hassomethingbeensetted(person)); person person1 = new person(); person1.setage(3); system.out.println("has been set something: " + hassomethingbeensetted(person1)); person person2 = new person(); person2.setname("john"); system.out.println("has been set something: " + hassomethingbeensetted(person2)); } public static class helper { public static boolean hassomethingbeensetted(person person) throws illegalaccessexception, invocationtargetexception { // todo javabean style attributes // todo flag indicate has been set, false default boolean somethingsetted = false; class<? extends person> aclass = person.getclass(); method[] methods = aclass.getmethods(); (method method : methods) { if (method.getdeclaringclass().equals(aclass) && method.getmodifiers() == modifier.public) { matcher matcher = pattern.compile("get(\\p{lu}[a-za-z]*)").matcher(method.getname()); if (matcher.find()) { // assuming there getter fixme check manually object value = method.invoke(person); if (value != null) { class<? extends object> clazz = value.getclass(); if (iswrappertype(clazz)) { if (clazz.equals(boolean.class)) { if (default_boolean != (boolean) value) { somethingsetted = true; } } else if (clazz.equals(byte.class)) { if (default_byte != (byte) value) { somethingsetted = true; } } else if (clazz.equals(short.class)) { if (default_short != (short) value) { somethingsetted = true; } } else if (clazz.equals(integer.class)) { if (default_int != (integer) value) { somethingsetted = true; } } else if (clazz.equals(long.class)) { if (default_long != (long) value) { somethingsetted = true; } } else if (clazz.equals(float.class)) { if (default_float != (float) value) { somethingsetted = true; } } else if (clazz.equals(double.class)) { if (default_double != (double) value) { somethingsetted = true; } } } else { somethingsetted = true; } } } } } return somethingsetted; } private static final hashset<class<?>> wrapper_types = getwrappertypes(); public static boolean iswrappertype(class<?> clazz) { return wrapper_types.contains(clazz); } private static hashset<class<?>> getwrappertypes() { hashset<class<?>> ret = new hashset<class<?>>(); ret.add(boolean.class); ret.add(character.class); ret.add(byte.class); ret.add(short.class); ret.add(integer.class); ret.add(long.class); ret.add(float.class); ret.add(double.class); ret.add(void.class); return ret; } private static boolean default_boolean; private static byte default_byte; private static short default_short; private static int default_int; private static long default_long; private static float default_float; private static double default_double; } }
Comments
Post a Comment