使用泛型时如何返回整数?

问题描述 投票:-1回答:1
// returns the value of the current element (or -1)
    public T GetValue()
    {
      Node<T> temp = head;
      while(temp != curr)
      {
          temp = temp.next;
          if(temp == null)
          {
              return -1;
          }
      }
      return temp.data;
    }

我的代码应该在当前元素处获取值并返回该值。如果找不到,则返回-1。在没有if语句的情况下运行此代码会给我Null指针异常。由于泛型,我无法使用if语句运行代码。

java generics nullpointerexception
1个回答
4
投票

如果TInteger,则只能返回-1;但是那不是通用的。

您需要某种特殊的值,不能将其误认为是T的“真实”实例。例如,您可以将返回类型更改为Optional<T>,因此可以返回Optional.empty()表示未找到值。

public Optional<T> GetValue() {
  // ...
      if(temp == null)
      {
          return Optional.empty();
      }
 // ...
 return Optional.of(temp.data);

}

或者,您可以为类的构造函数提供“未找到”的值,并在找不到内容时返回该值:

class YourClass<T> {
  private final T notFoundValue; // Assign in constructor.

  // ...

  public T GetValue() {
    // ...
      if(temp == null)
      {
          return notFoundValue;
      }
    // ...
    return temp.data;
  } 
}

但是您必须非常小心地处理返回notFoundValue的可能性;通过将不同(但相关)类型的内容返回到T(例如Optional<T>)来使其明确,是确保进行此处理的好方法。

© www.soinside.com 2019 - 2024. All rights reserved.