org.sfm.reflect.meta.PropertyMeta Maven / Gradle / Ivy
package org.sfm.reflect.meta;
import java.lang.reflect.Type;
import org.sfm.reflect.ReflectionService;
import org.sfm.reflect.Setter;
import org.sfm.reflect.TypeHelper;
public abstract class PropertyMeta {
private final String name;
private final String column;
protected final ReflectionService reflectService;
private volatile Setter setter;
private volatile ClassMeta classMeta;
private String path;
public PropertyMeta(String name, String column, ReflectionService reflectService) {
this.name = name;
this.column = column;
this.reflectService = reflectService;
}
public final Setter getSetter() {
Setter lsetter = setter;
if (lsetter == null) {
lsetter = newSetter();
setter = lsetter;
}
return lsetter;
}
protected abstract Setter newSetter();
public final String getName() {
return name;
}
public final String getColumn() {
return column;
}
public abstract Type getType();
public final ClassMeta getClassMeta() {
ClassMeta
meta = classMeta;
if (meta == null) {
meta = newClassMeta();
classMeta = meta;
}
return meta;
}
protected ClassMeta
newClassMeta() {
return reflectService.getClassMeta(getType());
}
public boolean isPrimitive() {
return TypeHelper.isPrimitive(getType());
}
public boolean isConstructorProperty() {
return false;
}
public abstract String getPath();
public boolean isSubProperty() {
return false;
}
}