尝试将 class 的实例与变量类型进行比较时出错

Error when trying to compare instance of a class with a variable type

我遇到了 Java 空指针异常的问题。所以基本上我正在编写一个代码,要求用户输入 X 数据,然后根据他输入的数据类型,将它们添加为相应的变量类型,同时将其与其他先前存在的变量进行比较。

    varvar A;
    varvar B;
    varvar C;
    System.out.println("Choose what to do:");
    System.out.println("1. Set variable A");
    System.out.println("2. Set variable B");
    System.out.println("3. Set variable C");
    b = src.nextInt(); //next int into variable b

if(b==1){

    while (src.hasNext()) { //Next thing the user is going to input

          if (src.hasNextInt()) { // If it's an integer, do this :

              if("Integer".equalsIgnoreCase(B.getClass().getSimpleName())){B = null;};
              if("Integer".equalsIgnoreCase(C.getClass().getSimpleName())){C = null;};

最后两行基本上是我正在努力解决的问题。 B 和 C 是 class 个 varvar 实例。如果 B 和 C 的现有内容是 Integer 变量,我将尝试删除它们。但是每当我添加这两行时,我都会得到一个 Nullpointer 异常。这是早期的 varvar class 代码:

              public static class varvar {
    int x;
    boolean y;
    double z;

    public varvar (int x){
        this.x = x;
    }

    public varvar (boolean y){
        this.y = y;
    }

    public varvar (double z){
        this.z = z;
    }

有人能帮帮我吗?我试图找到一种方法将 B 和 C 变量类型与 Integer 进行比较,如果它们确实包含 Integer 类型的变量,则删除它们。

您需要初始化 varvar A、B 和 C 以包含您的 class.

的实例

无论如何,如果您希望 class 对象与类型相关联,请使用

varvar.class.getSimpleName()

与您的变量 A、B 和 C 关联的 class 是 varvar 或其子class。

此外,您所说的 'delete' 是什么意思还不清楚。您似乎将变量设置为 null。

提高易读性的提示:class 名称应以大写字符开头,变量应以小写字符开头。

  1. Java 是区分大小写的语言。 B和b不是一回事。在您的示例中,B 从未设置,因此它为空。

  2. Java 有反射,所以所有带字符串的体操都在混淆代码。相反,试试这个:

    if (Integer.isInstance(B)) {B = null;}

当你看这个,并且你事先知道(作为代码的作者)B 是 varvar 的一个实例,你可以看到代码是荒谬的,因为 varvar 类型的对象永远不可能是输入整数。

我不确定你想在这里完成什么,所以我不能给你比这更多的信息。