为了账号安全,请及时绑定邮箱和手机立即绑定

如何将泛型类型转换为用户定义的类型?

如何将泛型类型转换为用户定义的类型?

撒科打诨 2021-09-15 14:24:21
背景:我们的任务是制作一个小的解释器。我们被暗示的目标之一是让我们不仅可以使用 type 的变量double,而且最终能够使用任何类型的变量。这样,我想通这样做是为在读type的String,并value设置为通用变量。然后我们将转换value为 Type 所说的任何内容。我可能会做一堆 if 语句说...if(type.equals("String")) { /*Cast Value to String*/ }但这太不雅观了,似乎是错误的。另外,如果用户要定义一个新的变量类型怎么办?我不认为硬编码可能types是答案。问题:有没有办法或多或少地将泛型变量直接转换为用户输入的类型?
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

看起来您的问题有两个部分。

  1. 将用户提供的值动态转换为用户也提供的类型。我认为这可以通过提供一个Type接口来实现,该接口可以具有parse将字符串转换为Type. 每个Type界面还可以提供用户输入的名称(如 double 或 name 等)。

  2. 第二部分 - 您不想对可用类型进行硬编码,可以通过使用 Java SPI(服务提供者接口)来实现。只需谷歌,你就会得到很好的例子。一个在这里


查看完整回答
反对 回复 2021-09-15
?
米脂

TA贡献1836条经验 获得超3个赞

我不知道你到底需要什么,但在 Java 中你可以找到这样的对象类型:


if (value.getClass() == String.class) {

    ....

}  

和:


if (value instanceof Object) {

    ....

}  

如果您不喜欢使用一堆 if 语句:


    switch (obj.getClass().getName()){

        case "java.lang.String":

            break;

        case "java.lang.Integer":

                break;

        default:


    }

并将您的通用对象转换为用户提供的自定义类型,您可以使用以下代码:


        Object obj = "";

        String className = "java.lang.String";

        try {

            Class aClass = Class.forName(className);

            Object result = aClass.cast(obj);

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        }

使用此代码,您可以将对象转换为以字符串形式给出的类名。


查看完整回答
反对 回复 2021-09-15
  • 2 回答
  • 0 关注
  • 250 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信