다음 코드는 ASM 바이트 형식으로 클래스의 핵심 정보를 읽는 방법입니다.
public static void main(String[] args) throws IOException {
loadClassInfo(ResourcesUtils.getResourceAsStream(PluginsSupportModule.class.getName().replace(".", "/") + ".class"));
}
private Map<String, ClassInfo> classInfoMap = new WeakHashMap<String, ClassInfo>();
private static void loadClassInfo(InputStream inStream) throws IOException {
ClassReader classReader = new ClassReader(inStream);
ClassInfo info = new ClassInfo();
info.className = classReader.getClassName().replace('/', '.');
info.superClass = classReader.getSuperName().replace('/', '.');
info.interFaces = classReader.getInterfaces();
for (int i = 0; i < info.interFaces.length; i++)
info.interFaces[i] = info.interFaces[i].replace('/', '.');
//packageName
if (info.className.lastIndexOf(".") > 0)
info.packageName = info.className.substring(0, info.className.lastIndexOf("."));
//annos
final ArrayList<String> annoStr = new ArrayList<String>();
classReader.accept(new ClassVisitor(Opcodes.ASM4) {
public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
/** Ljava/lang/Object; java/lang/Object 。*/
String annnoType = desc.substring(1, desc.length() - 1);
annoStr.add(annnoType);
return super.visitAnnotation(desc, visible);
}
}, ClassReader.SKIP_CODE);
info.annos = annoStr.toArray(new String[annoStr.size()]);
//
System.out.println();
}
/** */
private static class ClassInfo {
/* */
public String className = null;
/* */
public String packageName = null;
/* */
public String superClass = null;
/* */
public String[] interFaces = null;
/* */
public String[] annos = null;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.