当前位置: 首页 > 面试题库 >

在具有可空返回类型的方法上将@Nullable放在哪里?

仲孙英才
2023-03-14
问题内容

当使用javax.annotation.Nullable将方法标记为“潜在的返回null值”,其中把@Nullable注释?在方法上还是返回类型?

有什么技术差异,还是严格说来是样式问题?

风格A:

@Nullable
public Object blah() { ... }

风格B:

public @Nullable Object blah() { ... }

问题答案:

严格来说,这是一个样式问题。

无论您在源代码中的何处编写注释,注释实际上都在方法上。这是因为@Target对的定义进行了元注释javax.annotation.Nullable,从而使javax.annotation.Nullable方法成为注释。您可以在任何位置编写注释,因为Java语言规范语法允许方法注释中插入方法修饰符,例如public

我认为将批注放置在返回类型之前更加清晰。毕竟,返回类型为非null。说一个方法本身是非空的没有意义。

在返回类型之前放置注释还有另一个重要的好处:您的代码与Nullable定义为类型注释的版本兼容。类型注释是Java
8中引入的。它们比方法注释更具表现力,并且可以进行更强大的检查。例如,NullableEclipse和Checker
Framework
支持的注释是类型注释。



 类似资料:
  • 问题内容: 我读过一本书,说如果签名相同,我可以覆盖一个方法。根据书中的方法签名是Method_Name + Parameters传递的。 根据这本书,我可以重写具有不同返回类型的方法。在Java中实际上是否可以覆盖具有不同返回类型的方法?因为我在网上进行了一些搜索,所以我发现有人说要覆盖方法,返回类型也应该相同。 根据这本书,它还说,当我们尝试重载具有相同方法名称和参数但返回类型不同的方法时,j

  • 我读过一本书,它说我可以覆盖一个方法,如果它有相同的签名。根据这本书,方法的签名是Method_Name参数传递。 根据这本书,我可以重写具有不同返回类型的方法。在Java中,是否可以用不同的返回类型重写方法?因为我在网上做了一些搜索,我发现有人说要覆盖一个方法,返回类型也应该相同。 根据这本书,它还说,当我们试图用相同的方法名和参数重载一个方法,但返回类型不同时,java会抛出编译错误,因为签名

  • 重写的方法可以有不同的返回类型吗?

  • 问题内容: 是否可以在没有警告警告的情况下模拟(带有模拟)签名方法?我试过了: 但无论我如何声明,我总是会遇到编译错误。例如当我这样宣布 我收到标准的通用/ mockito编译错误 问题答案: 使用doReturn-when备用存根语法。 被测系统: 和测试用例: 无需错误或警告抑制

  • 问题内容: 我在接口上苦苦挣扎。考虑一下: 我希望函数返回a 或an ,具体取决于是否从或调用 当我尝试对此进行编译时,出现以下错误: 不能将s( StringGenerator类型)用作数组或切片文字中的Generator类型: StringGenerator不实现Generatorer(getValue方法的类型错误) 有getValue()字符串 要getValue() 我该如何实现? 问题

  • 问题内容: 假设我有一个超类,它定义了以下抽象方法 现在,如果我想在某些子类中覆盖它 我收到有关类型安全和未经检查的转换的警告: 类型安全:返回类型为从类型需要选中转换,以符合从类型 没有下摔倒,如果?有什么办法可以适当消除警告吗? 问题答案: 重写方法的返回类型必须是重写方法的返回类型的子类型。 不是where 的子类型。T在这里未知。 是每个子类型化规则的的子类型。 有关通配符的一些子类型化规