我们可以使用什么方法来代替Java反射API?我们如何定义它?源代码示例将会很有帮助。Java反射API中反射的方法是什么?
0
A
回答
0
通常,当您使用Reflection API时,这是因为您需要动态访问某个类的内容,并且没有其他方法可以执行此操作。请添加更多详细信息(如果您想要更详细的答案,请添加更多详细信息:)
1
JDK 1.6能够动态编译Java类(请参阅getSystemJavaCompiler)。如果你不想使用反射(我们使用动态编译出于性能原因),那么这是一个合理的方法。
从包含一串代码创建一个Java源文件:
public class JavaSourceFromString extends SimpleJavaFileObject {
final String code;
JavaSourceFromString(String name, String code) {
super(URI.create("string:///" + name.replace('.','/') + Kind.SOURCE.extension),
Kind.SOURCE);
this.code = code;
}
@Override
public CharSequence getCharContent(boolean ignoreEncodingErrors) {
return code;
}
}
static final String sourceCode = ""
+ "import org.example.MySomethingObject;"
+ "public class GetSomethingDynamically implements DynamicStringGetter {\n" // DynamicStringGetter would define getString as a standard way to get a String from an object
+ " public String getString(Object o) {\n"
+ " MySomethingObject obj = (MySomethingObject) o;\n"
+ " return o.getSomething();\n"
+ " }\n"
+ "}\n";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
List<JavaFileObject> jFiles = new ArrayList<JavaFileObject>();
jFiles.add(new JavaSourceFromString("org.example.DynamicClass", sourceCode));
compiler.getTask(null, fileManager, null, null, null, jFiles).call();
然后你动态加载新创建的类文件。
或者,使用字节码操作(如ASM)即时创建类。
这两种方法比标准反射要复杂得多,但可以比反射具有显着的性能提升。
相关问题
- 1. Java反射方法hashmap
- 2. Java反射 - 方法自省
- 3. Java反射是可访问的方法
- 4. 反射API中的方法类
- 5. 在反射API中使用object.getClass()方法
- 6. Java中的反射
- 7. Java反射豆物业API
- 8. 什么是在AX中使用反射的正确方法?
- 9. Java反射:我的Collection包含什么?
- 10. Scala的反射API
- 11. 调用方法的对象 - Java反射
- 12. 使用反射的Java调用方法
- 13. 在Java反射
- 14. java Android反射
- 15. Java反射
- 16. Java反射类
- 17. 反射超载。为反射可变参数值填充反射数组方法
- 18. Java反射,对象有什么类?
- 19. GetMethods反射的开销是什么
- 20. 什么是.NET反射的“成本”?
- 21. 解决反射开销的最佳方法是什么?
- 22. 用Java反射调用变量方法?
- 23. 使用反射重写java方法
- 24. Java反射调用方法NoSuchMethodException
- 25. 使用Java反射类获取方法
- 26. Android/Java:使用反射调用方法?
- 27. Java反射:Method.getGenericXXXXX方法如何工作?
- 28. Java反射调用方法“getDeclaredConstructors”
- 29. 用java反射通过其setter方法
- 30. 通用反射API?
你在说什么反思api?你在用什么语言?请提供一些背景。 – Frank
我正在使用java.I来谈论java中的反射api。 – anurag
所以你想要反射java代码的java反射API的替代? –