我尽力了标题,但它可能不是写它的好方法,所以我会尽力解释问题。对于熟悉Windows BATCH的人,此代码

set /p var =
goto %var%


将带您进入名称为存储在变量var中的字符串的页面。我需要在Java中做同样的事情。是的,我完全意识到,使用if语句对该想法很满意,只是它需要更多的代码行。我的方法是这样的:

import java.util.Scanner;
public class blarg {

    public static void main(String[] args) throws NullPointerException{

        Scanner scan = new Scanner(System.in);
        String spell = scan.nextLine();

        ClassLoader cl = null;

        Class cls = (cl.loadClass(spell)).class;
        String name = cls.getName();

        cl.loadClass(name);


    }

}


我的目标是在用户不清楚的情况下(因为不清楚,因为我不知道它是否可行或是否使用了正确的代码),将用户输入的内容输入变量spell。然后,我使用Class cls = (cl.loadClass(spell)).class获取与spell关联的类,然后获取该类,使用String name = cls.getName();获取完全限定的名称,最后加载该类。

我在Eclipse中收到以下错误:

线程“主”中的异常java.lang.Error:未解决的编译问题:令牌“类”上的语法错误,应使用标识符

因此,是否有某种方法可以解决该语法错误(通过添加标识符),或者其他人是否知道可以执行我尝试做的事情?如果不是这样,我绝不反对使用if语句,我只是认为如果可以进行这项工作,可以使我的生活更轻松。如果您需要更多信息,我会尽力提供。

最佳答案

使用.class的规则是here


  类文字是由类名称组成的表达式,
  接口,数组或原始类型,或伪类型void
  用“。”和令牌类。


所以你不能这样使用

Class cls = (cl.loadClass(spell)).class;


loadClass()方法已经加载您的类,只需使用

Class cls = cl.loadClass(spell);


假设spell包含完全限定的类名。

除非它是完全限定的名称,否则您将无法找到带有forName()的类。



不要忘记获得ClassLoader参考。

10-06 13:21