美文网首页Java 杂谈Java
Java 8 类型注解 Type Annotations

Java 8 类型注解 Type Annotations

作者: 洞庭湖上的麻雀 | 来源:发表于2019-08-27 16:14 被阅读0次

外文链接:https://dzone.com/articles/java-8-type-annotations

Lambda表达式是迄今为止Java 8讨论和推广最多的特性。我同意Lambda是一个很大的改进,但是我认为其他一些Java 8特性由于Lambda而显得有点暗淡。在这篇文章中,我想展示另一个很好的Java 8特性的一些例子:类型注解

类型注解是一种可以放在任何使用类型的位置上的注释(注:在 Java 8 之前的版本中,只能在声明式前使用注解)。这包括new运算符,类型转换,implements子句和throws子句。类型注解加强了分析Java代码的能力,并能够确保更强大的类型检查。

在代码实现上,Java 8为注解增加了两个新的注解类型:

@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
public @interface Test {
}

TYPE_PARAMETER 允许注解被用在类型变量(注:即泛型)的声明中(比如 MyClass<@Test T>)。
TYPE_USE 允许注解可以被用在任何类型使用的地方。

请注意,在Java 8中,以下示例中的注解没有实际作用。Java 8仅提供定义这些类型的注释的功能,然后由框架和工具开发者来实际上使用它们。所以这是一个将来框架会提供给我们的一个注解集合。以下大多数示例都来自Type Annotations规范和各种Java 8演示文稿。

带有类型注解的简单类型定义如下所示:

@NotNull String str1 = ...
@Email String str2 = ...
@NotNull @NotBlank String str3 = ...

类型注解也可以用于嵌套类型

Map.@NonNull Entry = ...

用于构造函数

new @Interned MyObject()
new @NonEmpty @Readonly List<String>(myNonEmptyStringSet)
myObject.new @Readonly NestedClass()

类型转换

myString = (@NonNull String) myObject;
query = (@Untainted String) str;

继承

class UnmodifiableList<T> implements @Readonly List<T> { ... }

泛型

List<@Email String> emails = ...
List<@ReadOnly @Localized Message> messages = ...
Graph<@Directional Node> directedGraph = ...
Map<@NonNull String, @NonEmpty List<@Readonly Document>> documents;

包括参数边界和通配符边界

class Folder<F extends @Existing File> { ... }
Collection<? super @Existing File> c = ...
List<@Immutable ? extends Comparable<T>> unchangeable = ...

抛出异常

void monitorTemperature() throws @Critical TemperatureException { ... }
void authenticate() throws @Fatal @Logged AccessDeniedException { ... }

instanceof 语句

boolean isNonNull = myString instanceof @NonNull String;
boolean isNonBlankEmail = myString instanceof @NotBlank @Email String;

以及最后Java 8 的方法引用

@Vernal Date::getDay
List<@English String>::size
Arrays::<@NonNegative Integer>sort

结论

类型注解是Java类型系统的一个有趣的补充。它们可以应用于任何类型的使用,并启用更详细的代码分析。如果您现在要使用类型注解,您应该查看Checker Framework

相关文章

网友评论

    本文标题:Java 8 类型注解 Type Annotations

    本文链接:https://www.haomeiwen.com/subject/zaieectx.html