当类名已知时,动态地将object class的java对象检索到给定的类

ac1kyiln  于 2021-06-30  发布在  Java
关注(0)|答案(4)|浏览(397)

我的接口.java

  1. publc interface MyInterface{
  2. void print();
  3. }

.java语言

  1. public Class Abc implements MyInterface{
  2. public void print(){
  3. System.out.print("Inside Abc");
  4. }
  5. }

xyz.java文件

  1. public Class Xyz implements MyInterface{
  2. public void print(){
  3. System.out.print("Inside Xyz");
  4. }
  5. }

主.java

  1. public Class Main{
  2. public static void main(String arg[]){
  3. String classPath="Abc"; // this String will get assign @ runtime.
  4. Class<?> s = Class.forName(classPath);
  5. }
  6. }

这里的main方法类路径是“”,所以我需要示例。classspath字符串将是或xyz或实现myinterface的任何类名。因此,根据classpath字符串,我需要该类的示例。例如,如果classpath是“”,那么类示例,classpath是“xyz”,那么xyz类示例。如何动态地实现这一点。

s71maibg

s71maibg1#

类的newinstance方法用于创建新示例。

  1. public static void main(String arg[]){
  2. String classPath="Abc"; // this String will get assign @ runtime.
  3. Class s = Class.forName(classPath);
  4. Object object = s.newInstance();// to create new Instance
  5. }
x9ybnkn6

x9ybnkn62#

您可以在运行时使用类名动态创建对象,输入为简单字符串。这是使用java语言中称为反射的一部分来完成的。反射允许旧代码调用新代码,而不需要重新编译。如果类具有无参数构造函数,则通常使用以下方法从其包限定类名(例如,“java.lang.integer”)创建对象:
class.forname class.newinstance如果需要将参数传递给构造函数,则可以使用以下替代方法:
反射最常用的用法是示例化一个类,该类的泛型类型在设计时已知,但其特定的实现类在设计时未知。有关示例,请参见插件主题。反射的其他用法相当少见,而且大多出现在专用程序中。

7cjasjjr

7cjasjjr3#

你需要知道调用什么构造函数。
假设您的所有类都有一个无参数构造函数,并且您需要该构造函数:

  1. MyInterface instance = (MyInterface) s.newInstance();

如果构造函数具有不同的签名,则需要提供该签名,例如使用单个字符串参数:

  1. MyInterface instance = (MyInterface) s
  2. .getConstructor(String.class)
  3. .newInstance("foo");
ubby3x7f

ubby3x7f4#

我在你的帖子里看到了一些拼写错误,所以让我们先来纠正一下。 public 以及 class 喜欢

  1. public interface MyInterface {
  2. void print();
  3. }
  4. public class Abc implements MyInterface {
  5. public void print() {
  6. System.out.print("Inside Abc");
  7. }
  8. }

然后你用 Class.newInstance() 创建 Object ,检查它是否为预期的类型 instanceof 然后像

  1. public static void main(String[] args) {
  2. try {
  3. Class<?> cls = Class.forName("Abc");
  4. Object o = cls.newInstance();
  5. if (o instanceof MyInterface) {
  6. MyInterface m = (MyInterface) o;
  7. m.print();
  8. }
  9. } catch (Exception e) {
  10. e.printStackTrace();
  11. }
  12. }
展开查看全部

相关问题