zoukankan      html  css  js  c++  java
  • java-@SafeVarargs注解的使用

    在声明具有模糊类型(比如:泛型)的可变参数的构造函数或方法时,Java编译器会报unchecked警告。鉴于这些情况,如果程序员断定声明的构造函数和方法的主体不会对其varargs参数执行潜在的不安全的操作,可使用@SafeVarargs进行标记,这样的话,Java编译器就不会报unchecked警告。

    先看看@SafeVarargs在Java SE中的声明:

    package java.lang;
    
    import java.lang.annotation.*;
    
    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.CONSTRUCTOR, ElementType.METHOD})
    public @interface SafeVarargs {}

    由Java源代码声明我们了解到:@SafeVarargs注解,只能用于标记构造函数和方法,由于保留策略声明为RUNTIME,所以此注解可以在运行时生效。

    使用的时候要注意:@SafeVarargs注解,对于非static或非final声明的方法,不适用,会编译不通过。

    @SafeVarargs使用示例如下:

    package test;


    public class SafeVarargsAnnotation<S> {
    private S[] args;

    //构造函数可以使用@SafeVarargs标记
    @SafeVarargs
    public SafeVarargsAnnotation(S... args) {
    this.args = args;
    }

    //此处不能使用@SafeVarargs,因为此方法未声明为static或final方法,如果要抑制unchecked警告,可以使用@SuppressWarnings注解
    @SuppressWarnings("unchecked")
    //@SafeVarargs
    public void loopPrintArgs(S... args) {
    for (S arg : args) {
    System.out.println(arg);
    }
    }

    //final方法可以使用@SafeVarargs标记
    @SafeVarargs
    public final void printSelfArgs(S... args) {
    for (S arg : this.args) {
    System.out.println(arg);
    }
    }

    public static void main(String[] args) {
    SafeVarargsAnnotation.loopPrintInfo("A", "B", "C");
    }

    //static方法可以使用@SafeVarargs标记
    @SafeVarargs
    public static <T> void loopPrintInfo(T... infos) {
    for (T info : infos) {
    System.out.println(info);
    }
    }
    }

    如果把代码中标注的@SafeVarargs注释掉,在编译时就会报unchecked警告:

    加上@SafeVarargs注解,警告被抑制。

    转:https://www.cnblogs.com/springmorning/p/10285780.html

  • 相关阅读:
    Leetcode 349. Intersection of Two Arrays
    hdu 1016 Prime Ring Problem
    map 树木品种
    油田合并
    函数学习
    Leetcode 103. Binary Tree Zigzag Level Order Traversal
    Leetcode 102. Binary Tree Level Order Traversal
    Leetcode 101. Symmetric Tree
    poj 2524 Ubiquitous Religions(宗教信仰)
    pat 1009. 说反话 (20)
  • 原文地址:https://www.cnblogs.com/fangyanr/p/14075169.html
Copyright © 2011-2022 走看看