public SimpleProperty(Class clazz, String name) {
        this.name = name;
        
        Class[] readParams = {};
        readMethod = Reflection.getMethod(clazz, "get" + name, readParams);
        if (readMethod == null) {
            readMethod = Reflection.getMethod(clazz, "is" + name, readParams);
        }
        
        if (readMethod == null) {
            String fieldName = Character.toLowerCase(name.charAt(0)) + name.substring(1);
            
            field = Reflection.getField(clazz, fieldName);
            
            if (field == null) {
//                throw new RuntimeException("Missing Method: get" + name + " " + fieldName + " " + clazz);
            } else {
                field.setAccessible(true);
                type = field.getType();
            }
        } else {
            type = readMethod.getReturnType();
        }

        if (type == null && writeMethod != null) {
            type = writeMethod.getReturnType();
        }
        
        Class[] writeParams = {type};
        writeMethod = Reflection.getMethod(clazz, "set" + name, writeParams);

        if (writeMethod == null && field == null) {
//            throw new RuntimeException("Missing Method: set" + name);
        }
        
        if (type != null) {
            isBoolean = type.equals(Boolean.class) || type.equals(boolean.class);
        }
    }