【问题标题】:How to parse String to an object如何将字符串解析为对象
【发布时间】:2013-12-01 13:51:37
【问题描述】:

首先,我已经搜索了一下,但无法真正找到我的问题的答案。如果这样的线程已经存在,我很抱歉。另外,我只是处于初学者的水平,所以也许我只是不明白所解释的内容,也许我没有使用正确的术语。

我想将字符串解析为对象类型。例如:

Boat boat1 = new Motorboat();
String type = JOptionPane.showInputDialog(null, "Enter a type");
if(boat1 instanceof type)
{
    System.out.println("boat1 is a motorboat");
}

Boat 是一个抽象类,Motorboat 是它的子类之一。

我知道这行不通,因为 type 是一个字符串,但我怎样才能使它工作呢?如何将此字符串解析为对象类型?

提前致谢。

【问题讨论】:

  • Getting class by its name 的可能重复项
  • 看看this answer
  • 次要观点:您(我相信)想要将字符串转换为类,而不是类的对象。 (字符串已经是一个对象。)

标签: java string parsing object


【解决方案1】:

您可以使用 Class.forName 从字符串中查找 Class 对象:

String typeName = JOptionPane.showMessageDialog(null, "Enter a type");
Class<?> class = Class.forName(typeName);
if (class != null && class.isInstance(boat1))
{
    System.out.println("boat1 is a motorboat");
}

但请特别注意,因为您的比较需要一个完全限定的类名(包括所有包)。

【讨论】:

  • 到目前为止有效,但现在我想将boat1 解析为用户提供的类型。我想要的是:摩托艇boat2 =(类型)boat1;还是不行。
  • @user3054461 使用Class.cast
【解决方案2】:

尝试使用你的对象的类:

if (boat1.getClass().getSimpleName().equals(type)) {
    System.out.println("boat1 is a motorboat");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 2013-03-12
    • 1970-01-01
    相关资源
    最近更新 更多