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

背景:我们的任务是制作一个小的解释器。我们被暗示的目标之一是让我们不仅可以使用 type 的变量double,而且最终能够使用任何类型的变量。

这样,我想通这样做是为在读typeString,并value设置为通用变量。然后我们将转换value为 Type 所说的任何内容。

我可能会做一堆 if 语句说...

if(type.equals("String")) { /*Cast Value to String*/ }

但这太不雅观了,似乎是错误的。另外,如果用户要定义一个新的变量类型怎么办?我不认为硬编码可能types是答案。

问题:有没有办法或多或少地将泛型变量直接转换为用户输入的类型?


撒科打诨
浏览 251回答 2
2回答

慕田峪7331174

看起来您的问题有两个部分。将用户提供的值动态转换为用户也提供的类型。我认为这可以通过提供一个Type接口来实现,该接口可以具有parse将字符串转换为Type. 每个Type界面还可以提供用户输入的名称(如 double 或 name 等)。第二部分 - 您不想对可用类型进行硬编码,可以通过使用 Java SPI(服务提供者接口)来实现。只需谷歌,你就会得到很好的例子。一个在这里。

米脂

我不知道你到底需要什么,但在 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();        }使用此代码,您可以将对象转换为以字符串形式给出的类名。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java