📄 collectiondealer.java
字号:
package xyz.frame.jpath;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.util.Collection;import java.util.Iterator;import xyz.frame.component.ComponentInstantiationException;import xyz.frame.util.ReflectionUtil;import xyz.frame.util.SettingException;/** * Collection implementation. * * @author Guilherme Silveira */public class CollectionDealer implements SetDealer { @SuppressWarnings("unchecked") public Object resizeAndSet(Object object, int position, boolean mayCreate, Type type) throws SettingException { int length = position + 1; Collection collection = (Collection) object; int realLen = collection.size(); if (realLen >= length) { return object; } if ((!mayCreate) || length != realLen + 1) { throw new SettingException( "Invalid array index - probably missed one object in between: " + length); } Class desiredClass = (type instanceof ParameterizedType) ? (Class) ((ParameterizedType) type) .getActualTypeArguments()[0] : Object.class; try { collection.add(ReflectionUtil.instantiate(desiredClass)); } catch (ComponentInstantiationException e) { throw new SettingException(e.getMessage(), e); } return object; } public Object getPosition(Object object, int arrayPosition, boolean mayCreate) throws SettingException { Collection collection = (Collection) object; if (arrayPosition >= collection.size()) { throw new SettingException("Invalid collection index: " + arrayPosition); } return iterate((Collection) object, arrayPosition); } /** * Iterates over a collection n times * * @param collection * the collection * @param index * n * @return the object at this position */ Object iterate(Collection set, int index) { Iterator it = set.iterator(); for (int i = 0; i < index; i++, it.next()) { ; } return it.next(); } @SuppressWarnings("unchecked") public Object resizeAndSet(Object obj, int position, Object value) throws SettingException { Collection collection = (Collection) obj; if (collection.size() > position) { throw new SettingException( "There is already an object in this position!"); } if (collection.size() != position) { throw new SettingException( "Invalid array index - probably missed one object in between: " + position); } collection.add(value); return obj; } public Class getType(Type type) { return (Class) ((ParameterizedType) type).getActualTypeArguments()[0]; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -