如何将实现识别为未使用?

How to recognize implementation as unused?

我正在创建一个 abstract class,其中 abstract method 必须 returnString。 如果它 returns null,它将被跳过并使用我的 default 代码代替。该选项将被视为未使用。

实施者必须决定是否要使用它们,如果不想,他们可以将其留给 return null,就像 IDE 方法存根所做的那样。

我需要它是因为我想让实现者知道这个方法的存在。

但问题来了: null 也是有效的 return。如果代码,无论出于何种原因,returns null,它将被无意中视为未使用。

如果我用 null 代替 "I don't want to return a String",它也会用存根..

当他们扩展我的 class 时,它将看起来像这样:

@Override
public String method(int i) {
    // TODO Auto-generated method stub
    return null;
}

如何接受 Stringnull 未使用,默认未使用?

在 Java 8+1 你可以把它变成 Optional<String>,

@Override
public Optional<String> method(int i) {
    return null;
}

1在 Java 的早期版本中,您可以使用 Guava Optional

最好使用 Optional.empty() 作为 return 值来指示方法不能 return 结果。但是,您需要第二个特殊值来表示该方法未实现。您可以为此使用 null,但我个人不喜欢 return 类型 Optional returning null 的方法。 Optional 的想法是它应该用作 return 类型 而不是 returning null.[=18= 的 ]

我的首选解决方案是如果该方法未实现则抛出异常,并有一个单独的 boolean 方法指示是否将抛出异常。

@Override
public boolean isImplemented() {
    return false;
}

@Override
public Optional<String> method(int i) {
    throw new UnsupportedOperationException();
}