Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 枚举类型上的空指针访问警告_Java_Enums - Fatal编程技术网

Java 枚举类型上的空指针访问警告

Java 枚举类型上的空指针访问警告,java,enums,Java,Enums,我的主要活动代码是 private void updateConnectionState() { Device localDevice = this.Controller.getConnectedDevice(); if (localDevice == null) updateModelSpinner(localDevice.getType()); //warning at this line

我的主要活动代码是

private void updateConnectionState()
      {
              Device localDevice = this.Controller.getConnectedDevice();
              if (localDevice == null)

              updateModelSpinner(localDevice.getType());    //warning at this line          
              str2 = localDevice.getHostName();
              if (!TextUtils.isEmpty(str2))

            }




private void updateSpinner(Device.Type paramType)
      {
        boolean bool = Device.Type.UNKNOWN.equals(paramType);
        int i = 0;
        if (!bool)
          i = 1 + paramTvType.ordinal();
        this.ModelSpinner.setSelection(i);
      }

private void ModelSpinner(Device.Type paramType)
      {
        boolean bool = Device.Type.UNKNOWN.equals(paramType);
        int i = 0;
        if (!bool)
          i = 1 + paramType.ordinal();
        this.ModelSpinner.setSelection(i);
      }
我的枚举类是

public class Device {

    private Type type = Type.A_LOGIC;   

    public static Type getTypeForId(int paramInt)
      {
        switch (paramInt)
        {
        default:
          return Type.A_LOGIC;      
        case 0:
          return TvType.B_LOGIC;
        case 1:
          return TvType.A_LOGIC;
        case 2:
          return TvType.D_LOGIC;
        case 3:
          return TvType.E_LOGIC;
        case 4:
        }
        return TvType.F_LOGIC;          
      }

  public void setType(Type paramType)
      {
        this.Type = paramType;
      }

     public enum Type
     {       
         A_LOGIC("A_LOGIC"),                
         B_LOGIC ("B_LOGIC" ),      
         C_LOGIC ("C_LOGIC"), 
         D_LOGIC("D_LOGIC"),
         E_LOGIC ("E_LOGIC"),
        UNKNOWN("UNKNOWN");

        private String object;

        TvType(String localobj)
        {
            this.object; = localobj;
        }       
        public String getLetter()
        {
          return this.object;;
        }       
     }

 public Type getType()
      {
        return this.type;
      }
在方法内部的主要活动中,我调用类型为

updateSpiner(localDevice.getType())

但在这里,它将警告显示为

Null pointer access: The variable localTVDevice can only be null at this location
并在该行抛出一个空点错误。 我不熟悉枚举的概念,所以请告诉我它为什么会抛出此错误。我提到了堆栈溢出,但找不到答案。

从您的代码:

Device localDevice = this.Controller.getConnectedDevice();
if (localDevice == null)

updateModelSpinner(localDevice.getType());
由于if没有
{}
,此代码类似于:

Device localDevice = this.Controller.getConnectedDevice();
if (localDevice == null) {
    updateModelSpinner(localDevice.getType());
}
因此发出警告

修复:

Device localDevice = this.Controller.getConnectedDevice();
if (localDevice != null) {
    updateModelSpinner(localDevice.getType());
    // more code using localDevice
}
从您的代码:

Device localDevice = this.Controller.getConnectedDevice();
if (localDevice == null)

updateModelSpinner(localDevice.getType());
由于if没有
{}
,此代码类似于:

Device localDevice = this.Controller.getConnectedDevice();
if (localDevice == null) {
    updateModelSpinner(localDevice.getType());
}
因此发出警告

修复:

Device localDevice = this.Controller.getConnectedDevice();
if (localDevice != null) {
    updateModelSpinner(localDevice.getType());
    // more code using localDevice
}

问题是这个代码

if (localDevice == null)
    updateModelSpinner(localDevice.getType()); 
如果localDevice为null, 然后调用updateModelSpinner(null.getType())

您可能需要以下代码:

if (localDevice != null)
    updateModelSpinner(localDevice.getType()); 

您必须决定当localDevice为null时应该发生什么。

问题在于此代码

if (localDevice == null)
    updateModelSpinner(localDevice.getType()); 
如果localDevice为null, 然后调用updateModelSpinner(null.getType())

您可能需要以下代码:

if (localDevice != null)
    updateModelSpinner(localDevice.getType()); 

您必须决定当localDevice为null时应该发生什么。

此编译器警告表示未为变量(在本例中为localTVDevice)赋值,通过此变量调用方法无疑会在运行时产生NullPointerException

还有一件事我在你的代码里看到了?您可以直接将枚举值与“==”进行比较,而不是像在此行中那样将其与等号进行比较:

boolean bool = Device.Type.UNKNOWN.equals(paramType);

boolean bool = paramType == Device.Type.UNKNOWN;

此编译器警告表示变量(在本例中为localTVDevice)未赋值,通过此变量调用方法无疑会在运行时产生NullPointerException

还有一件事我在你的代码里看到了?您可以直接将枚举值与“==”进行比较,而不是像在此行中那样将其与等号进行比较:

boolean bool = Device.Type.UNKNOWN.equals(paramType);

boolean bool = paramType == Device.Type.UNKNOWN;


你应该分享你的UpdateSpiner方法。和你所有的调用代码。您发布的代码和错误消息引用了不同的变量名称,我们需要查看您实际写入的内容。您可能希望使用带有数字字段的枚举,并在使用
对象的位置使用
名称()。同时检查您的开关
案例1
此处可能有输入错误(
C_LOGIC
),请在调用引发错误的方法的位置显示代码。警告中没有提到枚举。这可能与设备类无关。相反,您已经为设备声明了一个对象变量,但没有实例化其中的任何内容。您应该共享您的UpdateSpiner方法。以及所有调用代码。您发布的代码和错误消息引用了不同的变量名称,我们需要查看您实际写入的内容。您可能希望使用带有数字字段的枚举,并在使用
对象的位置使用
名称()。同时检查您的开关
案例1
此处可能有输入错误(
C_LOGIC
),请在调用引发错误的方法的位置显示代码。警告中没有提到枚举。这可能与设备类无关。更确切地说,您已经为设备声明了一个对象变量,但没有在其中实例化任何内容。我尝试了此操作,但仍然面临相同的错误感谢您指出错误我尝试了此操作,但仍然面临相同的错误感谢您指出错误让我尝试此操作并让您知道。谢谢你的邀请answer@AndroidOptimist这与RC的答案基本相同-你说出于某种原因没有帮助。谢谢Rolf,我解决了这个问题。这是一个愚蠢的问题,我没有注意到。让我试试这个,让你知道。谢谢你的邀请answer@AndroidOptimist这与RC的答案基本相同-你说出于某种原因没有帮助。谢谢Rolf,我解决了这个问题。这是一个我没有注意到的愚蠢问题。