我想创建一个对象,我只知道它的类路径 任何帮助将不胜感激。如何使用反射包从类路径创建对象
回答
如果你有一个String
全限定类名,使用Class#forName()
和Class#newInstance()
。
Object o = Class.forName("com.example.Foo").newInstance();
但是,这需要该类已存在于类路径中并且具有(隐式)默认构造函数。
如果不是,你必须在一个URL
类的位置,然后使用URLClassLoader
并将它传递给它接受它作为参数另一Class#forName()
方法。
URL url = getItSomehow();
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { url });
Object o = Class.forName("com.example.Foo", true, classLoader).newInstance();
或者,如果你在一个File
拥有它,而不是,然后将其转换为URL
第一:“我只知道它的类路径”
File file = getItSomehow();
URL url = file.toURI().toURL();
// Continue with URLClassLoader.
好的,但是如果我想调用任何属于该类的方法,那我知道它的路径或限定名称 – 2010-12-13 20:55:00
这是一个不同的问题,所以这里只是一个教程链接而不是答案:http://download.oracle。 com/javase/tutorial/reflect/member/methodInvocation.html如果你使用Stucks,请按右上方的Ask Question按钮。不要忘记包含关于您正在使用的特定步骤的详细信息,最好还有一小段代码片段,其中重现了您的问题。选择和使用正确的术语时要小心。 “classpath”这个词显然不是你认为的:) – BalusC 2010-12-13 20:55:55
好的,但我想澄清一下,在我的项目中,我有3个包,3个类我想在第四个包和第四个类中实例化一个对象根据用户的输入,3个包中有三个类。 – 2010-12-13 21:10:40
您的意思是?
Class c = Class.forName("java.lang.String");
- 1. 如何使用Spring Framework从类路径/名称创建对象?
- 2. 反应路由器:创建从对象创建'链接'路径
- 3. 使用反射优化对象创建
- 4. 使用反射创建新对象?
- 5. 使用Java反射创建对象
- 6. 使用反射创建对象
- 7. 如何动态创建使用反射的通用C#对象?
- 8. 如何使用反射创建通用对象
- 9. 类路径和反射
- 10. 使用“新”关键字创建的对象并使用反射创建对象
- 11. 使用Java创建原始类型/对象反射
- 12. 使用Java反射的getReturnType()创建该类型的新对象
- 13. 使用Scala反射来创建其声明类的对象
- 14. 如何在c#中使用反射创建新对象?
- 15. 如何防止使用反射创建多个对象
- 16. 使用Java反射从类路径中加载类
- 17. 如何从绝对路径名创建文件对象?
- 18. 创建使用反射来创建对象
- 19. 如何使用反射从字段/类获取对象?
- 20. 如何从类对象在运行时使用反射
- 21. 如何使用UNC路径创建位图对象?
- 22. 如何使用上下文应用程序的类路径创建GroovyShell对象
- 23. 如果通过使用反射创建对象,那么获取?
- 24. 如何从路径(键数组)创建嵌套对象结构?
- 25. 使用“新”关键字创建一个对象使用反射
- 26. 为什么我在尝试使用反射从另一个反射创建反射对象时出现错误
- 27. 如何使用-moz-element()创建反射?
- 28. 如何创建使用反射
- 29. 创建包含类路径的jar
- 30. 如何使用类型创建对象
你能澄清你的_什么意思_究竟是什么你需要使用哪些信息? +1 to @ BalusC的评论。 – 2010-12-13 20:38:55
你对“classpath”有什么意思? java.lang.String中的全限定类名或者java.net.URL中的类路径位置(通过ClassLoader#getResource()获得)或者java.io中的绝对文件路径。 File'? – BalusC 2010-12-13 20:39:48
类路径?如果你的意思是沿着“org.mycompany.FirstClass”这个句子,那么你应该走得很远!这种字符串被称为完全限定名称。 – Rekin 2010-12-13 20:40:26