如何将实现识别为未使用?
How to recognize implementation as unused?
我正在创建一个 abstract
class
,其中 abstract
method
必须 return
和 String
。
如果它 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;
}
如何接受 String
和 null
未使用,默认未使用?
在 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();
}
我正在创建一个 abstract
class
,其中 abstract
method
必须 return
和 String
。
如果它 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;
}
如何接受 String
和 null
未使用,默认未使用?
在 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();
}