JDK1.8新特性--重复注解

Day43 JDK1.8新特性 下 接口的类优先原则和接口冲突,日期时间组件,重复注解 包路径类名描述java.time针对日期和时间操作的包LocalDate用于表示日期的类LocalTime用于表示时间的类用于表示日期时间的类Instant时间戳类(1970.1.1 0:0:0 到现在的毫秒数)Period两个日期间隔类Duration两个时间间隔类针对日期时间特殊格式操作的包日本帝国历法系统类泰国佛教日历系统类针对时间日期时间格式化操作的包格式化日期时间类针对时间矫正操作的包针对时区操作的包1.接口的类优先原则 和 接口冲突2.日期时间组件。 阅读详情

一、重复注解

在JDK1.8之后标注在类,方法等上面的注解可以重复出现,如下图
在这里插入图片描述
但是如果你直接在方法等上面注多个相同的注解,程序还是会报错,错误信息提示注解MyAnnotation没有被一个Repeatable注解修饰,而Repeatable注解里面传入的参数必须也是一个注解,这个注解所包含的值必须有一个要重复注解的这个注解类型的数组。我们同样可以和以前一样通过反射得到注解的值,如下代码

public class TestAnnotation {
    @MyAnnotation("Hello")
    @MyAnnotation("World")
    public void show(){

    }

    @Test
    public void test01() throws NoSuchMethodException {
        Class<TestAnnotation> testAnnotationClass = TestAnnotation.class;
        Method show = testAnnotationClass.getMethod("show");
        MyAnnotation[] annotationsByType = show.getAnnotationsByType(MyAnnotation.class);
        Arrays.stream(annotationsByType)
                .map(MyAnnotation::value)
                .forEach(System.out::println);
    }
}

@Repeatable(MyAnnotations.class)
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{
    String value() default "annotation";
}

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotations{
    MyAnnotation[] value();
}

结果如图:
在这里插入图片描述

JDK1.8新特性 Lambda是一个匿名函数(方法), 允许把函数作为一个方法的参数。利用Lambda表达式可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。一般都是优化匿名内部类函数式接口是指仅仅只包含一个抽象方法的接口,jdk1.8提供了一个@FunctionalInterface注解来定义函数式接口,如果我们定义的接口不符合函数式的规范便会报错。配合Lambda表达式一起使用Stream(流)是数据渠道,用于操作数据源(集合、数组等),生成元素序列。 阅读详情

相关推荐

PHP证书图片生成

$realname = "姓名"; $schoolname = "学校"; $idcard = "身份证号"; $image = imagecreatefrompng('certification.png'); // 证书模版图片文件的路径 $red = imagecolorallocate($image,00,00,00); // 字体颜色

4036

06)JDK1.8 新特性学习 重复注解

在JDK1.8之后重复注解学习 1.创建一个注解类 package com.wying.demo.RepeatAnnotation; import java.lang.annotation.*; /** * description:jdk1.8重复注解 * date: 2021/12/2 * author: gaom * version: 1.0 */ //定义注解可以使用的位置 @Target({ElementType.TYPE,ElementType.FIELD,Eleme..

qq445829096的博客 892

音频测试专题

麦克风与扬声器单体测试指标及整机性能测试概述 麦克风测试指标包括频率响应、灵敏度、指向性等10项关键参数,用于评估声音捕捉和信号转换性能。扬声器测试包含频率响应、灵敏度等12项指标,涉及声学特性和物理参数。整机性能测试覆盖安静、嘈杂和正常三种环境,重点检测麦克风底噪、清晰度、扬声器音量及通话质量等12项功能指标。两类单体测试与整机测试共同构成完整的音频设备质量评估体系,确保产品在不同场景下的性能表现。

weixin_52640906的博客 1319

【JDK8新特性】重复注解与类型注解

  愿你如阳光,明媚不忧伤。 目録1. 重复注解2. 类型注解 友情链接 【年薪百万之IT界大神成长之路】注解都玩不溜,还怎么称霸IT界(入门篇)!!!   1. 重复注解 Repeatable 即一个注解可以在一个类、方法或者字段上同时使用多次。注解并不是什么新鲜东西了,比如 spring 中存在大量注解简化我们的配置。但是在 JDK8 之前,我们是不能使用重复注解的,即某个位置相同注解只能出现一次。 Repeatable 源码 注释类型 java.lang.annotatio

おうせき碩の博客 655

Python编写的人工智能美颜系统

接下来,我们应用高斯模糊效果来实现美颜效果,并将原始图像与美颜效果图像进行融合。通过使用OpenCV和Dlib库,我们可以轻松地进行面部特征识别和图像处理,实现美颜效果。接下来,我们应用高斯模糊效果来实现美颜效果,并将原始图像与美颜效果图像进行融合。通过使用OpenCV和Dlib库,我们可以轻松地进行面部特征识别和图像处理,实现美颜效果。在函数内部,我们加载了人脸检测器和面部特征预测器,并读取了输入图像。在函数内部,我们加载了人脸检测器和面部特征预测器,并读取了输入图像。安装完成后,我们可以开始编写代码。

DevScript的博客 724

嵌入式Modbus协议面试题及参考答案

Modbus 协议采用主从模式进行通信,这种模式定义明确,便于在工业环境中实现设备之间的有序数据交互。在主从模式中,存在一个主站(Master)和多个从站(Slave)。主站通常是工业控制系统中的上位机,如 PLC、工控机等,它负责发起通信请求,控制整个通信过程。从站则是各种现场设备,如传感器、执行器等,它们接收主站的请求,并根据请求进行相应的操作,然后将结果返回给主站。主站的主要功能包括:发起数据读取或写入请求、控制通信的时序和流程、处理从站返回的数据。

大模型大数据攻城狮的专栏 2046

【JDK8新特性】8.重复注解与类型注解

重复注解与类型注解 基于尚硅谷java8教程 1. 重复注解重复注解就是运行在同一个地方(类、方法、属性)重复使用同一个注解。可以配合反射进行使用 注意: *JEP=JDK Enhancement-Proposal (JDK 增强建议 ),每个JEP即一个新特性。 在java 8里面,注解一共有2个改进,一个是重复注解(JEP 120),另一个就是类型注解(JEP104)*使用重复注解

七夜之家 848

Apache DolphinScheduler 实现了对 OceanBase 的元数据库支持

Apache DolphinScheduler 是一款开源的分布式工作流任务调度系统,它提供了可视化的工作流设计和调度功能,支持大数据任务的自动化调度和监控。最近的更新中,Apache DolphinScheduler 引入了对 OceanBase 数据库的元数据库支持,这为用户在大数据环境中管理和调度任务提供了更多选择。用户可以通过 DolphinScheduler 提供的可视化界面进行工作流的设计和调度,也可以通过 DolphinScheduler 提供的 API 进行任务的编程调度。

VavzNvml的博客 495

检查list中是否有重复的元素并返回重复元素

public static List<String> getDuplicateElements(List<Dept> list, boolean flag) { return list.stream() // .map(e -> { // 获取deptCode或deptAlias的Stream ...

qq_25613413的博客 2691

【3】 灰度变换(1)

第三章(1)【总三】

课题分离 659

⑩电子产品拆解分析-家用无线遥控开关433Mhz

①免布线随意贴,装上就能使用解决单线开关烦恼;②遥控配对简单,无线通讯距离长,信号可穿墙;

a6662580的博客 4720

猿来绘Java-45-JDK8新特性可重复注解和类型注解

Java 8对注解处理提供了两点改进: 可重复的注解及可用于类型的注解。此外,反射也得到了加强,在Java8中能够得到方法参数的名称。这会简化标注在方法参数上的注解 可重复注解: ① 在MyAnnotation上声明@Repeatable,成员值为MyAnnotations.class ② MyAnnotation的Target和Retention等元注解与MyAnnotations相同。(相同的Target,Retention,Inherited) JDK8之前可重复注解的写法 pa.

知行合一 318

【新能源汽车测试工程师必看!DBC文件50条实战技巧,看懂这篇直接封神】

如果你是新能源汽车研发/测试工程师,还在为信号解析错误、报文找不到、DBC看不懂、实车故障复现不了头疼——那这篇文章,你一定要!在整车电控开发里,DBC = CAN总线的官方字典。没有DBC,报文就是一串乱码;读不懂DBC,测试寸步难行;用不好DBC,排查故障全靠猜。本文总结50条全网最实用、最贴近实车、最能解决问题的DBC技巧,从基础语法到新能源专用信号,从工具操作到故障排错,全部来自一线台架、实车、高压平台实战经验。不废话、不空谈、不玄学,全是能直接落地的硬货!

优快云-新能源汽车研发测试专业博主 1373

43JDK1.8新特性【Stream;Optional;接口的类优先原则和接口冲突;日期时间组件 ;重复注解】

1.Stream的中间操作 - 排序 2.Stream的终止操作 – 匹配与查找 3.Stream的终止操作 – 归约 4.Stream的终止操作 – 收集 5.Stream的串行流和并行流 6.Optional 7.接口的类优先原则 和 接口冲突 8.日期时间组件 9.重复注解

gangain的博客 1018

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

jdk1.5 jdk1.7 jdk1.8比较重要的新特性

jdk1.5新特性 jdk1.7新特性 switch语句可以使用字符串 泛型推断(又叫泛型简化)     jdk1.8新特性 ①允许接口中有默认方法和静态方法的实现 public interface Inter { public abstract void print(); //其中public可以省略 public default void defaultPrint...

不羁朔风的博客 706

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

[1-01-46].第46节:注解 - JDK中的元注解

1.对现有的注解进行解释说明的注解被称之为元注解2.元数据的理解:对现有数据进行修饰的数据,叫做元数据,这里的name,String都可以称之为元数据:String name = “zhangsan”,可以对比理解元注解1.@Retention: 只能用于修饰一个注解定义,用于指定该注解的生命周期,2.包含一个RetentionPolicy 类型的成员变量, 使用@Rentention 时必须为该 value 成员变量指定值:仅仅在源文件中有效(即源文件保留),在编译器直接丢弃这种策略的注释:在。

F-T-er 560

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Java 8 新特性:扩展注解(类型注解和重复注解)

一.注解(JDK1.5) 二.注解更新(JDK1.8) 类型注解和重复注解…………

Promise Sun special column 2万+

JDK1.8新特性(三)使用详情

继JDK1.8新特性(一),JDK1.8新特性(二)后继续学习JDK1.8新特性。 【7】Optional 类 final修饰的Optional&amp;amp;amp;amp;amp;amp;lt;T&amp;amp;amp;amp;amp;amp;gt; 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用null 表示一个值不存在,现在Optional 可以更好的表达这个概念。并且可以避免空指针异常。 常用方法: Optional.of(T t)

小小默:进无止境 1958

JDK1.5、1.7、1.8新特性

JDK1.5 静态导入 1. import:表示去找哪一个类/去哪一个包下找哪些被使用到的类。 在Java语言中,java.lang包下的API,不需要导入,直接可以使用。 导入包的语法: import 被引入类的全限定名; import 包 . * 2. 静态导入 : 如果我们需要使用某一个类中的静态成员(字段/方法/内部类),此时可以使用静态导入。 import static 被引入类的全限定...

qq_41850601的博客 1118

JDK1.8新特性(全)

Lambda是一个匿名函数(方法), 允许把函数作为一个方法的参数。利用Lambda表达式可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。一般都是优化匿名内部类函数式接口是指仅仅只包含一个抽象方法的接口,jdk1.8提供了一个@FunctionalInterface注解来定义函数式接口,如果我们定义的接口不符合函数式的规范便会报错。配合Lambda表达式一起使用Stream(流)是数据渠道,用于操作数据源(集合、数组等),生成元素序列。

gangain的博客 2257

JDK1.8的新特性2

代表一个存在或不存在的值,原来用null表示一个值不存在,现在Optional可以更好的表达这个概念。​ 如果一个接口中定义了一个默认方法,而接口实现类的父类定义了一个同名的方法时,选择父类中的方法。默认方法:从JDK1.8开始,接口中可以有默认方法,即default修饰的方法,此方法可以让。需求2:stuList获取流对象,把原来流中的学生对象替换成学生姓名。的方法(不管方法是否是默认方法),那么必须覆盖该方法来解决冲突。换言之,集合是存储数据的容器,流是使用操作这些数据的技术。

m0_57463864的博客 988

jdk1.8新特性(三)

Optional类 常用方法 Optional.of(T t):创建一个Optional实例 Optional.empty():创建一个空的Optional实例 Optional.ofNullable(T t):若t不为null,创建Optional实例,否则创建空实例 isPresent():判断是否包含值 orElse(T t):如果调用对象包含值,返回该值,否则返回t orElseGet(...

nqmysb的博客 353

注解

从JDK1.5 开始,java增加了对元数据(MetaData)的支持,也就是Annotation(注解) Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。 Annotat...

weixin_34123613的博客 92
上一篇: JDK1.8新特性--新时间与日期API
下一篇: 稀疏数组说明及代码实现
suixinghero
博客等级 码龄7年 10粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值