
commons.box.app.MetaBeanObject Maven / Gradle / Ivy
Show all versions of commons-box-app Show documentation
package commons.box.app;
import javax.annotation.Nonnull;
import java.io.Serializable;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
/**
* 注意,此对象并不是直接的 meta bean 实例
*
* 在实际应用中经常会使用 key 相等条件对 meta bean 进行封装,此类提供了一个代理,确保mb比较是以 key.equlas(key) 进行
*/
public final class MetaBeanObject implements MetaBean {
private static final long serialVersionUID = 5430029294548034375L;
private final String key;
private final MetaBean mb;
private MetaBeanObject(@Nonnull MetaBean mb) {
this.key = mb.config() + "$" + mb.key();
this.mb = mb;
}
@Override
@Nonnull
public Map innerMap() {
return mb.innerMap();
}
@Override
@Nonnull
public String config() {
return mb.config();
}
@Override
public String key() {
return mb.key();
}
@Override
@Nonnull
public String label() {
return mb.label();
}
@Override
@Nonnull
public String name() {
return mb.name();
}
@Nonnull
public MetaBean mb() {
return this.mb;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MetaBeanObject that = (MetaBeanObject) o;
return Objects.equals(key, that.key);
}
@Override
public int hashCode() {
return Objects.hash(key);
}
@Override
public String toString() {
return mb.toString();
}
public static MetaBeanObject from(MetaBean mb) {
if (mb instanceof MetaBeanObject) return (MetaBeanObject) mb;
else return (mb != null) ? new MetaBeanObject(mb) : null;
}
}