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

Java 如何将泛型类型强制转换为用户定义的类型?,java,Java,背景:我们的任务是制作一个小型的解释器。我们被暗示的目标之一是,我们不仅要处理double类型的变量,还要最终能够处理任何类型的变量 我认为这样做的方式是将类型作为字符串读入,并将值设置为泛型变量。然后,我们会将价值投射到所说的任何类型 我可能会做一些if语句,比如 if(type.equals("String")) { /*Cast Value to String*/ } 但这太不雅观了,似乎是错误的。另外,如果用户要定义一个新的变量类型呢?我不认为硬编码的可能类型是答案 问:有没有一种方法

背景:我们的任务是制作一个小型的解释器。我们被暗示的目标之一是,我们不仅要处理double类型的变量,还要最终能够处理任何类型的变量

我认为这样做的方式是将类型作为字符串读入,并将值设置为泛型变量。然后,我们会将价值投射到所说的任何类型

我可能会做一些if语句,比如

if(type.equals("String")) { /*Cast Value to String*/ }
但这太不雅观了,似乎是错误的。另外,如果用户要定义一个新的变量类型呢?我不认为硬编码的可能类型是答案


问:有没有一种方法可以或多或少地将泛型变量直接强制转换为用户输入的类型?

我不知道您到底需要什么,但在java中可以找到如下对象类型:

if (value.getClass() == String.class) {
    ....
}  
以及:


如果您不喜欢使用一堆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();
        }

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

看起来问题有两个部分

将用户提供的值动态转换为用户也提供的类型。我认为这可以通过提供一个类型接口来实现,该接口可以有一个将字符串转换为您的类型的解析方法。每个类型接口还可以提供由用户输入的名称,如double或name等。 第二部分-您不想硬编码的地方,可用的类型可以通过使用JavaSPI服务提供程序接口来实现。只要谷歌,你就会得到很好的例子。
无关:在Java中,变量名以小写开头……我知道。我这样做是为了可读性。不要这样做,否则人们会认为这是一个静态字段。啊。好啊我会解决的。我没有否决你的评论。然而,第一部分直接与我所说的相矛盾,我不想对每种类型执行一系列if语句。第二,我可能不正确,但我认为String.getClass只会返回一个字符串,不管字符串中说了什么..如果你不喜欢使用一堆if语句,你可以使用switch case,我在我的帖子中添加了它现在你可以在一行中使用它,就像你需要的ifobj.getClass.getName.equalsjava.lang.String{/*../}你更新你的问题,我想找到你的答案,所以我更新我的答案,我希望它能帮助你。当我醒来时,我会去看SPIs的。听起来很有希望。但基本上:没有简单的方法来满足我的要求?简单是主观的。也就是说,SPI非常容易使用。
        Object obj = "";
        String className = "java.lang.String";
        try {
            Class aClass = Class.forName(className);
            Object result = aClass.cast(obj);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }