当前位置: 首页 > 知识库问答 >
问题:

java.util.@nullable是什么意思?

袁英豪
2023-03-14
public static <T> java.util.@Nullable Optional<T> toJavaUtil(
    @Nullable Optional<T> googleOptional) {
  return googleOptional == null ? null : googleOptional.toJavaUtil();
}

共有1个答案

彭存
2023-03-14

public static java.util.@nullable optional ToJavautil 是这样编写的,因为通常样式public static @nullable java.util.optional ToJavautil 是无效的。这在JLS§9.7.4中定义:

如果类型T的注释适用于类型上下文中的类型(或类型的任何部分),并且T适用于类型上下文,并且该注释是不可接受的,则这是编译时错误。

例如,假设一个注释类型TA,它仅用@target(elementType.type_use)进行元注释。术语@ta java.lang.objectjava.@ta lang.object是非法的,因为与@ta最接近的简单名称被归类为包名称。另一方面,java.lang.@ta object是合法的。

org.checkerframework.checker.nullness.qual@nullable的类型声明为:

@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})

所以它适用于这个规则。

由于包java.util和类名optional是拆分的,所以当我们使用javap-C[compiled class name]查看编译后的代码时,可以看出这个结构不会破坏执行:

class just.a.test.Main {
  just.a.test.Main();
    Code:
       0: aload_0
       1: invokespecial #1          // Method java/lang/Object."<init>":()V
       4: return

  public static <T> java.util.Optional<T> toJavaUtil(blub.Optional<T>);
    Code:
       0: aload_0
       1: ifnonnull     8
       4: aconst_null
       5: goto          12
       8: aload_0
       9: invokevirtual #2          // Method blub/Optional.toJavaUtil:()Ljava/util/Optional;
      12: areturn
}

此编译器错误也适用于以下变量

private @Nullable2 java.util.Optional<?> o;

但当注释额外获得目标类型ElementType.field时,就可以接受了,正如在相同的JLS子句中所写的:

如果TA另外用@target(ElementType.field)进行元注释,那么术语@TA java.lang.object在既是声明又是类型上下文的位置是合法的,例如字段声明@TA java.lang.object f;。这里,@TA被认为适用于f的声明(而不是类型java.lang.Object),因为TA适用于字段声明上下文。

 类似资料:
  • 问题内容: 在java int,float等中,是原始类型。如果我们需要将其与泛型一起使用,则使用包装器类。但是,以下声明在Java中仍然有效, 即使它是原始类型,如何调用? 问题答案: 原始对象成为对象 对于基元,在相应的包装器类中有一些名为TYPE的常量的Class对象可用-即,int.class更改为java.lang.Integer.TYPE。对于其他类型,编译器在正在编译的类中创建一个私

  • 问题内容: 我目前正在(恢复)使用EJB的速度,而当我离开时,它发生了巨大的变化(到目前为止更好)。但是,我遇到了一个我正在苦苦挣扎的概念,并且想更好地理解它,因为它似乎在我们的代码中使用了(我工作的地方,而不是我和我所有的声音)。 这是我在一本书中找到的示例。这是显示如何使用注释的示例的一部分: 的类是一个相当简单的类来定义对:和。 哦,我从Rubinger&Burke的O’Reilly的Ent

  • 问题内容: 什么是POSIX?我已阅读Wikipedia文章,并且每次遇到该术语时都会阅读。事实是我从来没有真正了解过它是什么。 有人可以通过解释“ POSIX的需求”来向我解释吗? 问题答案: POSIX是IEEE指定的一系列标准,用于阐明和统一Unix- y操作系统提供的应用程序编程接口(以及附属问题,例如命令行外壳实用程序)。当您编写依赖于POSIX标准的程序时,可以肯定地将它们轻松移植到大

  • 本文向大家介绍NULL是什么意思?相关面试题,主要包含被问及NULL是什么意思?时的应答技巧和注意事项,需要的朋友参考一下 NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。 对NULL这个值的任何比较都会生产一个NULL值。 您不能把任何值与一个 NULL值进行比较,并在逻辑上希望获得一个答案。 使用IS NULL来进行NULL判断

  • 问题内容: 我是接口的新手,并尝试通过github执行SOAP请求 我不明白 在此代码中: 我已经观察到相同的语法 但不知道通过什么实现 问题答案: 您可以参考文章“ 如何在Go中使用接口 ”(基于“ Russ Cox对接口的描述 ”): 什么 是 接口? 接口是两件事: 这是一组方法, 但这也是一种 该 类型的 空接口 是没有方法的接口。 由于没有Implements关键字,所有类型都至少实现了

  • 问题内容: 这是什么意思? 问题答案: 在jQuery中,属性只是该属性的别名。 标识符(或)只是一个 构造函数 ,使用该标识符创建的所有实例都从构造函数的原型继承。 一个简单的构造函数: 一个类似于jQuery体系结构的简单结构: