ClassInstanceMultiMap.java
net.minecraft.util.ClassInstanceMultiMap
信息
- 全限定名:net.minecraft.util.ClassInstanceMultiMap
- 类型:public class
- 包:net.minecraft.util
- 源码路径:src/main/java/net/minecraft/util/ClassInstanceMultiMap.java
- 起始行号:L15
- 继承:AbstractCollection
- 职责:
TODO
字段/常量
-
byClass- 类型:
Map<Class<?>,List<T>> - 修饰符:
private final - 源码定位:
L16 - 说明:
TODO
- 类型:
-
baseClass- 类型:
Class<T> - 修饰符:
private final - 源码定位:
L17 - 说明:
TODO
- 类型:
-
allInstances- 类型:
List<T> - 修饰符:
private final - 源码定位:
L18 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public ClassInstanceMultiMap(Class<T> baseClass) @ L20
- 构造器名:ClassInstanceMultiMap
- 源码定位:L20
- 修饰符:public
参数:
- baseClass: Class
说明:
TODO
方法
下面的方法块按源码顺序生成。
public boolean add(T instance) @ L25
- 方法名:add
- 源码定位:L25
- 返回类型:boolean
- 修饰符:public
参数:
- instance: T
说明:
TODO
public boolean remove(Object object) @ L38
- 方法名:remove
- 源码定位:L38
- 返回类型:boolean
- 修饰符:public
参数:
- object: Object
说明:
TODO
public boolean contains(Object o) @ L52
- 方法名:contains
- 源码定位:L52
- 返回类型:boolean
- 修饰符:public
参数:
- o: Object
说明:
TODO
public <S> Collection<S> find(Class<S> index) @ L57
- 方法名:find
- 源码定位:L57
- 返回类型:
Collection - 修饰符:public
参数:
- index: Class
说明:
TODO
public Iterator<T> iterator() @ L67
- 方法名:iterator
- 源码定位:L67
- 返回类型:Iterator
- 修饰符:public
参数:
- 无
说明:
TODO
public List<T> getAllInstances() @ L72
- 方法名:getAllInstances
- 源码定位:L72
- 返回类型:List
- 修饰符:public
参数:
- 无
说明:
TODO
public int size() @ L76
- 方法名:size
- 源码定位:L76
- 返回类型:int
- 修饰符:public
参数:
- 无
说明:
TODO
代码
public class ClassInstanceMultiMap<T> extends AbstractCollection<T> {
private final Map<Class<?>, List<T>> byClass = Maps.newHashMap();
private final Class<T> baseClass;
private final List<T> allInstances = Lists.newArrayList();
public ClassInstanceMultiMap(Class<T> baseClass) {
this.baseClass = baseClass;
this.byClass.put(baseClass, this.allInstances);
}
@Override
public boolean add(T instance) {
boolean success = false;
for (Entry<Class<?>, List<T>> entry : this.byClass.entrySet()) {
if (entry.getKey().isInstance(instance)) {
success |= entry.getValue().add(instance);
}
}
return success;
}
@Override
public boolean remove(Object object) {
boolean success = false;
for (Entry<Class<?>, List<T>> entry : this.byClass.entrySet()) {
if (entry.getKey().isInstance(object)) {
List<T> list = entry.getValue();
success |= list.remove(object);
}
}
return success;
}
@Override
public boolean contains(Object o) {
return this.find(o.getClass()).contains(o);
}
public <S> Collection<S> find(Class<S> index) {
if (!this.baseClass.isAssignableFrom(index)) {
throw new IllegalArgumentException("Don't know how to search for " + index);
} else {
List<? extends T> instances = this.byClass
.computeIfAbsent(index, k -> this.allInstances.stream().filter(k::isInstance).collect(Util.toMutableList()));
return (Collection<S>)Collections.unmodifiableCollection(instances);
}
}
@Override
public Iterator<T> iterator() {
return (Iterator<T>)(this.allInstances.isEmpty() ? Collections.emptyIterator() : Iterators.unmodifiableIterator(this.allInstances.iterator()));
}
public List<T> getAllInstances() {
return ImmutableList.copyOf(this.allInstances);
}
@Override
public int size() {
return this.allInstances.size();
}
}引用的其他类
- Util
- 引用位置:
方法调用 - 关联成员:
Util.toMutableList()
- 引用位置: