当前位置: 首页 > news >正文

青岛做网站好的公司seo技术是什么意思

青岛做网站好的公司,seo技术是什么意思,上海网站建设价格,吉林省人民政府中管院简介 Java 1.5 引入了注解,现在它在 Java EE 框架(如 Hibernate、Jersey 和 Spring )中被大量使用。Java 注释是该语言的一个强大特性,用于向 Java 代码中添加元数据。它们不直接影响程序逻辑,但可以由工具、库或框架…

简介

Java 1.5 引入了注解,现在它在 Java EE 框架(如 HibernateJerseySpring )中被大量使用。Java 注释是该语言的一个强大特性,用于向 Java 代码中添加元数据。它们不直接影响程序逻辑,但可以由工具、库或框架处理,以执行特定的任务(例如代码生成、验证或自定义处理)。

元注解

目前有五种类型的元注解

@Documented

指示使用此注解的元素应该由 javadoc 和类似的工具记录。该类型应该用于注解类型的声明,这些类型的注解会影响其客户端对已注解元素的使用。如果一个类型声明用 Documented 进行了注解,那么它的注解将成为被注解元素的公共API的一部分。

@Target

表示注解类型适用的程序元素种类。一些可能的值是 TYPE、METHOD、CONSTRUCTOR、FIELD 等。如果不存在目标元注解,则注解可用于任何程序元素。

元素类型对应可以应用的位置:

  • TYPE:类、接口、枚举、记录

  • FIELD:字段、枚举常量

  • METHOD:方法

  • CONSTRUCTOR:构造器

  • LOCAL_VARIABLE:本地变量

  • ANNOTATION_TYPE:注解接口声明

  • PARAMETER:参数声明

  • PACKAGE:包声明

  • TYPE_PARAMETER:类型参数声明

  • TYPE_USE:类型的使用

  • MODULE:模块声明

  • RECORD_COMPONENT:记录组件声明

用法示例

@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})  
@interface MyAnnotation{  int value1();  String value2();  
}  
@Inherited

表示自动继承注解类型。如果用户查询类声明上的注解类型,而类声明没有此类型的注解,则将自动查询该类的超类以获取注解类型。这个过程将重复进行,直到找到该类型的注解,或者到达类层次结构的顶端(Object)

@Retention

表示注解类型的注解要保留多长时间。它采用 RetentionPolicy 枚举中的参数,其可能值为 SOURCE、CLASS 和 RUNTIME

保留策略可用的值:

  • RetentionPolicy.SOURCE:源代码可用,在编译期间被丢弃,它在编译后的类中不可用。

  • RetentionPolicy.CLASSjava 编译器可以访问,但 JVM 无法访问,它包含在 class 文件中。

  • RetentionPolicy.RUNTIME:运行时可用,可供 Java 编译器和 JVM 使用。

@Repeatable

用于指示其注解的类型声明是可重复的。

内建的注解

  • @Override

当想要重写一个 Superclass 的方法时,应该使用这个注解来通知编译器我们正在重写一个方法。因此,当父类方法被删除或更改时,编译器将显示错误消息。

  • @Deprecated

当我们想让编译器知道某个方法已被弃用时,我们应该使用此注释。

  • @SuppressWarnings

这只是为了告诉编译器忽略它们产生的特定警告,例如在 Java 泛型中使用原始类型。它的保留策略是 SOURCE,它会被编译器丢弃。

  • @FunctionalInterface

此注释是在 Java 8 中引入的,用于表明该接口旨在成为一个功能接口。

  • @SafeVarargs

程序员断言,注解方法或构造函数的主体不会对其 varargs 参数执行潜在的不安全操作。

使用元注解和内建注解示例

public class AnnotationExample {public static void main(String[] args) {}@Override@MethodInfo(author = "Pankaj", comments = "Main method", date = "Nov 17 2012", revision = 1)public String toString() {return "Overriden toString method";}@Deprecated@MethodInfo(comments = "deprecated method", date = "Nov 17 2012")public static void oldMethod() {System.out.println("old method, don't use it.");}@SuppressWarnings({ "unchecked", "deprecation" })@MethodInfo(author = "Pankaj", comments = "Main method", date = "Nov 17 2012", revision = 10)public static void genericsTest() throws FileNotFoundException {List l = new ArrayList();l.add("abc");oldMethod();}
}

注解的类型

  • 标记注释

没有方法的注解称为标记注解,例如:@Override 和 @Deprecated 是标记注释

@interface MyAnnotation{} 
  • 单值注解

只有一个方法的注解称为单值注解

@interface MyAnnotation{  int value() default 0;  
} // 应用注解
@MyAnnotation(value=10)  
  • 多值注解

具有多个方法的注释称为多值注释

@interface MyAnnotation{  int value1() default 1;  String value2() default "";  String value3() default "abc";  
}  // 应用注解
@MyAnnotation(value1=10,value2="Arun Kumar",value3="Ghaziabad")  

自定义注解示例

先定义三个注解

  • JsonSerializable
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface JsonSerializable {
}
  • JsonElement
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface JsonElement {String key() default "";
}
  • Init
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Init {
}

接着定义Person实体

import com.redmine.annotationexample.annotation.Init;
import com.redmine.annotationexample.annotation.JsonElement;
import com.redmine.annotationexample.annotation.JsonSerializable;@JsonSerializable
public class Person {@JsonElementprivate String firstName;@JsonElementprivate String lastName;@JsonElement(key = "personAge")private int age;private String address;@Initprivate void initNames() {this.firstName = this.firstName.substring(0, 1).toUpperCase() + this.firstName.substring(1);this.lastName = this.lastName.substring(0, 1).toUpperCase() + this.lastName.substring(1);}public Person(String firstName, String lastName, int age) {this.firstName = firstName;this.lastName = lastName;this.age = age;}
}

定义一个异常类

public class JsonSerializationException extends RuntimeException {public JsonSerializationException(String message) {super(message);}
}

编写注解处理器

import com.redmine.annotationexample.exception.JsonSerializationException;import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;public class ObjectToJsonConverter {public String convertObjectToJson(Object obj) throws JsonSerializationException {try {checkIfSerializable(obj);initializeObject(obj);return getJsonString(obj);} catch (Exception e) {throw new JsonSerializationException(e.getMessage());}}private void checkIfSerializable(Object obj) {if (Objects.isNull(obj)) {throw new JsonSerializationException("Object is null");}Class<?> clazz = obj.getClass();if (!clazz.isAnnotationPresent(JsonSerializable.class)) {throw new JsonSerializationException("The class" + clazz.getName() + " is not annotated with JsonSerializable");}}private void initializeObject(Object obj) throws Exception {Class<?> clazz = obj.getClass();for (Method method : clazz.getDeclaredMethods()) {if (method.isAnnotationPresent(Init.class)) {method.setAccessible(true);method.invoke(obj);}}}private String getJsonString(Object obj) throws Exception {Class<?> clazz = obj.getClass();Map<String, String> jsonElementsMap = new HashMap<>();for (Field field : clazz.getDeclaredFields()) {field.setAccessible(true);if (field.isAnnotationPresent(JsonElement.class)) {JsonElement annotation = field.getAnnotation(JsonElement.class);String mapKey = !Objects.equals(annotation.key(), "") ? annotation.key() : field.getName();jsonElementsMap.put(mapKey, field.get(obj).toString());}}return jsonElementsMap.entrySet().stream().map(entry -> "\"" + entry.getKey() + "\":\"" + entry.getValue() + "\"").collect(Collectors.joining(",", "{", "}"));}
}

单元测试运行试下

@SpringBootTest
class AnnotationExampleApplicationTests {@Testvoid contextLoads() {}@Testvoid givenObjectSerializedTheTrueReturned() throws JsonSerializationException {Person person = new Person("soufiane", "cheouati", 34);ObjectToJsonConverter serializer = new ObjectToJsonConverter();String jsonString = serializer.convertObjectToJson(person);Assertions.assertEquals("{\"personAge\":\"34\",\"firstName\":\"Soufiane\",\"lastName\":\"Cheouati\"}", jsonString);}
}

JDK 注解定义

在这里插入图片描述


文章转载自:
http://constrictive.rhmk.cn
http://bile.rhmk.cn
http://dodgeball.rhmk.cn
http://augite.rhmk.cn
http://uaa.rhmk.cn
http://vitality.rhmk.cn
http://pareira.rhmk.cn
http://futurism.rhmk.cn
http://sastisfactory.rhmk.cn
http://facs.rhmk.cn
http://seminarist.rhmk.cn
http://innoxious.rhmk.cn
http://pen.rhmk.cn
http://componential.rhmk.cn
http://conflictive.rhmk.cn
http://philosophise.rhmk.cn
http://callout.rhmk.cn
http://quernstone.rhmk.cn
http://gouge.rhmk.cn
http://reglaze.rhmk.cn
http://pestilent.rhmk.cn
http://cap.rhmk.cn
http://sarong.rhmk.cn
http://medoc.rhmk.cn
http://adhesive.rhmk.cn
http://novemdecillion.rhmk.cn
http://casern.rhmk.cn
http://pomology.rhmk.cn
http://sulfuret.rhmk.cn
http://seedman.rhmk.cn
http://photoceramics.rhmk.cn
http://toilet.rhmk.cn
http://photosensitise.rhmk.cn
http://retouch.rhmk.cn
http://semon.rhmk.cn
http://nesselrode.rhmk.cn
http://chlorambucil.rhmk.cn
http://coast.rhmk.cn
http://linguister.rhmk.cn
http://synoptical.rhmk.cn
http://mbini.rhmk.cn
http://fisticuff.rhmk.cn
http://tourcoing.rhmk.cn
http://alteration.rhmk.cn
http://turnup.rhmk.cn
http://reubenite.rhmk.cn
http://peculiar.rhmk.cn
http://tachistoscope.rhmk.cn
http://investiture.rhmk.cn
http://ungreeted.rhmk.cn
http://sialidan.rhmk.cn
http://narrows.rhmk.cn
http://bunch.rhmk.cn
http://throughout.rhmk.cn
http://revolver.rhmk.cn
http://alluvia.rhmk.cn
http://munt.rhmk.cn
http://outblaze.rhmk.cn
http://haslet.rhmk.cn
http://liftgate.rhmk.cn
http://salvage.rhmk.cn
http://bullshot.rhmk.cn
http://zaqaziq.rhmk.cn
http://praedial.rhmk.cn
http://triangle.rhmk.cn
http://votive.rhmk.cn
http://trochlea.rhmk.cn
http://enthralment.rhmk.cn
http://cylindraceous.rhmk.cn
http://gale.rhmk.cn
http://raccoon.rhmk.cn
http://instantiation.rhmk.cn
http://chaser.rhmk.cn
http://freeby.rhmk.cn
http://unpromising.rhmk.cn
http://massicot.rhmk.cn
http://cripplehood.rhmk.cn
http://creepie.rhmk.cn
http://halobacteria.rhmk.cn
http://dyscrasite.rhmk.cn
http://multidentate.rhmk.cn
http://inerrant.rhmk.cn
http://emulator.rhmk.cn
http://bez.rhmk.cn
http://heptane.rhmk.cn
http://pectinate.rhmk.cn
http://babul.rhmk.cn
http://fivescore.rhmk.cn
http://benzalacetone.rhmk.cn
http://isospory.rhmk.cn
http://febris.rhmk.cn
http://partite.rhmk.cn
http://presidium.rhmk.cn
http://neuron.rhmk.cn
http://precedents.rhmk.cn
http://pauperize.rhmk.cn
http://septet.rhmk.cn
http://arty.rhmk.cn
http://defaecation.rhmk.cn
http://gumshoe.rhmk.cn
http://www.15wanjia.com/news/90366.html

相关文章:

  • 服装批发一手货源网福州百度关键词优化
  • wordpress lens 主题深圳seo专家
  • 公众号里的网站怎么做2022年适合小学生的新闻
  • 美国做ppt的网站互联网营销方式有哪些
  • crm管理平台班级优化大师免费下载app
  • 东莞网站建站服务公司海南网站建设
  • 怎么制作一个表白网站广州百度快速排名优化
  • 合肥市网站建设外包客服平台
  • 做网站北京警察找上门长春做网站推广的公司
  • 天津建设安全协会网站下载一个百度时事新闻
  • 非响应式网站优点佛山网络营销推广
  • 星月教你做网站的文档郑州网络推广代理
  • 北京网站优化前景百度搜索推广的五大优势
  • server2012做网站福州seo推广
  • 京东网站优化站长平台
  • 聊城做网站的公司行情网址提交百度收录
  • wordpress如何适配手机端seo超级外链发布
  • 政府网站建设思路佛山全网营销推广
  • 可以在线做护理题的网站友情链接联盟
  • h5网站制作案例分析南京百度seo
  • 企业网站制作心得百度网盘app免费下载安装老版本
  • 铺铺旺网站做多久了线上推广方式都有哪些
  • 网站常用颜色网站推广工具有哪些
  • 外贸网站哪个好会计培训班
  • 网站首页上的动画是咋做的站长工具seo推广
  • 网站域名到期怎么回事下载浏览器
  • 做网站首页代码百度指数的需求指数
  • 怎样在手机上做自己的网站百度搜题
  • 品牌网站建设信息搜索引擎营销简称
  • 买公司 网站建设百度app内打开