0
我正在使用字节码动态生成java类,然后加载类。我在一个教程中找到了这个代码。了解嵌套集合的困难
private int stringConstant(String s) {
return constant(CONSTANT_Utf8, s);
}
private int classConstant(String s) {
int classNameIndex = stringConstant(s.replace('.', '/'));
return constant(CONSTANT_Class, classNameIndex);
}
private int constant(Object... data) {
List<?> dataList = Arrays.asList(data);
if (poolMap.containsKey(dataList))
return poolMap.get(dataList);
poolMap.put(dataList, poolIndex);
return poolIndex++;
}
private void writeConstantPool(DataOutputStream dout) throws IOException {
dout.writeShort(poolIndex);
int i = 1;
for (List<?> data : poolMap.keySet()) {
assert(poolMap.get(data).equals(i++));
int tag = (Integer) data.get(0);
dout.writeByte(tag); // u1 tag
switch (tag) {
case CONSTANT_Utf8:
dout.writeUTF((String) data.get(1));
break; // u2 length + u1 bytes[length]
case CONSTANT_Class:
dout.writeShort((Integer) data.get(1));
break; // u2 name_index
default:
throw new AssertionError();
}
}
}
private final Map<List<?>, Integer> poolMap =
new LinkedHashMap<List<?>, Integer>();
private int poolIndex = 1;
我不明白如何使用包含列表的地图,它似乎不像传统的做这种事情的oop方式。
传统的OOP做什么方式?你会怎么做? –
_“这看起来不像传统的做这种事的办法。” - - 为什么不呢?嵌套列表对象只是用作映射键的对象。什么不是关于它的OOP? –
wouldnt它是更好的只是让一个类代表什么在列表中,并使用它作为密钥 – Popgalop