【问题标题】:How to use return of "Class.forName(String)" as a type for variable?如何使用“Class.forName(String)”的返回作为变量的类型?
【发布时间】:2018-02-19 15:02:11
【问题描述】:

如何使用“Class.forName(String)”的返回作为变量的正确类型? 我的意思是,例如 - 如果我正在上课:

Class.forName("java.lang.String");

如何将其用作“字符串”,例如:

String something = "text";

?? 谢谢你的帮助! :)

【问题讨论】:

标签: java class variables types


【解决方案1】:

这里是如何使用反射创建String 实例。

String s = (String) Class.forName("java.lang.String")
                         .getConstructor(Class.forName("java.lang.String"))
                         .newInstance("Foo bar");
System.out.println(s);

这将使用Class.forName(String) 恢复Class

从这个类中,您可以得到一个特定的构造函数,它使用Class.getConstructor(Class<?>...) 接受Class<?>...(0..N 参数)。然后使用Constructor.newInstance() 创建传递参数值的实例。

这是不安全的,你可以从中捕捉到很多异常,但这会做到。

您可以直接使用Class.newInstance,但它需要有一个可用的空构造函数。

【讨论】:

    【解决方案2】:

    演示和几句话,但我不认为这对你有实际意义。 我的目标是提供非常基本的背景知识,也有更复杂的答案。

    Object instance = null;
    try{ 
     Class clazz = Class.forName("java.lang.String");
    // now here is String.class
    
      instance = clazz.newInstance();
      // empty String as Object
    }catch(Exception e)
    {
      e.printStackTrace();
    }
    

    在此代码之后instance 将有空字符串(可作为对象访问,不太有用) 一般来说,很多事情都会出错,也许类没有参数公共构造函数等

    https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#newInstance()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-21
      • 2013-03-05
      • 2020-09-07
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 2022-11-10
      • 2012-09-29
      相关资源
      最近更新 更多