1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/l0km-dtalk

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
ItemBuilder.java 2.3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
10km Отправлено 27.05.2021 09:54 fe83001
package gu.dtalk;
import static com.google.common.base.Preconditions.*;
import java.lang.reflect.Modifier;
import java.util.Collection;
import java.util.List;
import com.google.common.base.Throwables;
/**
* 菜单条目构造器
* @author guyadong
*
* @param <T> 菜单条目子类类型
*/
public class ItemBuilder<T extends BaseItem> {
protected final T item;
public ItemBuilder(T item) {
super();
this.item = item;
}
public ItemBuilder<T> name(String name) {
item.setName(name);
return this;
}
public ItemBuilder<T> disable(boolean disable) {
item.setDisable(disable);
return this;
}
public ItemBuilder<T> disable() {
return disable(true);
}
public ItemBuilder<T> hide(boolean hide) {
item.setHide(hide);
return this;
}
public ItemBuilder<T> hide(){
return hide(true);
}
public ItemBuilder<T> needReset(boolean needReset) {
if(item instanceof CmdItem){
((CmdItem)item).setNeedReset(needReset);
}
return this;
}
public ItemBuilder<T> needReset() {
return needReset(true);
}
public ItemBuilder<T> description(String description) {
item.setDescription(description);
return this;
}
public ItemBuilder<T> uiName(String uiName) {
item.setUiName(uiName);
return this;
}
public ItemBuilder<T> childs(List<BaseItem> childs) {
checkState(item.isContainer(),"%s isn't container",item.getClass().getSimpleName());
item.setChilds(childs);
return this;
}
public ItemBuilder<T> addChilds(BaseItem... childs) {
checkState(item.isContainer(),"%s isn't container",item.getClass().getSimpleName());
item.addChilds(childs);
return this;
}
public ItemBuilder<T> addChilds(Collection<BaseItem> childs) {
checkState(item.isContainer(),"%s isn't container",item.getClass().getSimpleName());
item.addChilds(childs);
return this;
}
public T instance(){
return item;
}
public static <T extends BaseItem>ItemBuilder<T> builder(T instance) {
return new ItemBuilder<T>(checkNotNull(instance,"instance is null"));
}
public static <T extends BaseItem>ItemBuilder<T> builder(Class<T> type) {
// 不允许为抽象类
checkArgument(!Modifier.isAbstract(type.getModifiers()),"%s is a abstract class",type.getName());
try {
return new ItemBuilder<T>(type.newInstance());
} catch (Throwable e) {
Throwables.throwIfUnchecked(e);
throw new RuntimeException(e);
}
}
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/l0km-dtalk.git
git@api.gitlife.ru:oschina-mirror/l0km-dtalk.git
oschina-mirror
l0km-dtalk
l0km-dtalk
master