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

怎么样才能让百度收录自己的网站网站没后台怎么修改类容

怎么样才能让百度收录自己的网站,网站没后台怎么修改类容,怎么在广西建设厅网站注销c证,挖掘关键词的工具转载自 Java 注解指导手册 – 终极向导译文出处#xff1a; Toien Liu 原文出处#xff1a;Dani Buiza编者的话#xff1a;注解是java的一个主要特性且每个java开发者都应该知道如何使用它。我们已经在Java Code Geeks提供了丰富的教程, 如Creating Your Own Java Annota…转载自  Java 注解指导手册 – 终极向导译文出处 Toien Liu   原文出处Dani Buiza编者的话注解是java的一个主要特性且每个java开发者都应该知道如何使用它。我们已经在Java Code Geeks提供了丰富的教程, 如Creating Your Own Java Annotations, Java Annotations Tutorial with Custom Annotation 和 Java Annotations: Explored  Explained.我们也有些文章是关于注解在不同类库中的应用包括 Make your Spring Security Secured annotations more DRY和 Java Annotations  A Real World Spring Example.现在是时候汇总这些和注解相关的信息到一篇文章了祝大家阅读愉快。目录什么是注解介绍消费器注解语法和注解元素在什么地方使用使用案例内建注解Java 8 与注解自定义注解提取注解注解集成使用注解的知名类库小结下载资料在这篇文章中我们将阐述什么是Java注解它们如何工作怎么使用它们。我们将揭开Java注解的面纱包括内建注解或称元注解还将讨论Java8中与之相关的的新特性。最后我们将实现自定义的注解编写一个使用注解的处理程序消费器它通过java反射使用注解。我们还会列出一些基于注解知名且被广泛应用的第三方类库如JunitJAXBSpringHibernate。在文章的最后会有一个压缩文件包含了文章中的所有示例实现这些例子使用的软件版本如下所示Eclipse Luna 4.4JRE Update 8.20Junit 4Hibernate 4.3.6FindBugs 3.0.01.什么是注解注解早在J2SE1.5就被引入到Java中主要提供一种机制这种机制允许程序员在编写代码的同时可以直接编写元数据。在引入注解之前程序员们描述其代码的形式尚未标准化每个人的做法各异transient关键字、注释、接口等。这显然不是一种优雅的方式随之而来的一种崭新的记录元数据的形式——注解被引入到Java中。其它因素也促成了这个决定当时不同类型的应用程序使用XML作为标准的代码配置机制这其实并不是最佳方式因为代码和XML的解耦以及未来对这种解耦应用的维护并不低廉。另外由于非保留字的使用例如“deprecated”自从Java1.4便开始在Java文档中使用。我非常确定这是一个现在在注解中使用“”原因。包含注解的设计和开发的Java规范主要有以下两篇JSR 175 A metadata facility for the Java programming LanguageJSR 250 Common Annotations for the Java Platform2. 介绍解释何为注解的最佳方式就是元数据这个词描述数据自身的数据。注解就是代码的元数据他们包含了代码自身的信息。注解可以被用在包类方法变量参数上。自Java8起有一种注解几乎可以被放在代码的任何位置叫做类型注解。我们将会在后面谈到具体用法。被注解的代码并不会直接被注解影响。这只会向第三系统提供关于自己的信息以用于不同的需求。注解会被编译至class文件中而且会在运行时被处理程序提取出来用于业务逻辑。当然创建在运行时不可用的注解也是可能的甚至可以创建只在源文件中可用在编译时不可用的注解。3.消费器理解注解的目的以及如何使用它都会带来困难因为注解本身并不包含任何功能逻辑它们也不会影响自己注解的代码那么它们到底为什么而存在呢这个问题的解释就是我所称的注解消费器。它们是利用被注解代码并根据注解信息产生不同行为的系统或者应用程序。例如在Java自带的内建注解元注解中消费器是执行被注解代码的JVM。还有其他稍后谈到的其他例子例如JUnit消费器是读取分析被注解代码的JUnit处理程序它还可以决定测试单元和方法执行顺序。我们会在JUnit章节更深入。消费器使用Java中的反射机制来读取和分析被注解的源代码。使用的主要的包有java.lang, java.lang.reflect。我们将会在本篇指南中介绍如何用反射从头开始创建一个自定义的消费器。4. 注解语法和元素声明一个注解需要使用“”作为前缀这便向编译器说明该元素为注解。例如Annotation public void annotatedMehod() { ...}上述的注解名称为Annotation它正在注解annotatedMethod方法。编译器会处理它。注解可以以键值对的形式持有有很多元素即注解的属性。Annotation(info I am an annotation,counter 55 ) public void annotatedMehod() { ...}如果注解只包含一个元素或者只需要指定一个元素的值其它则使用默认值可以像这样声明Annotation(I am an annotation) public void annotatedMehod() { ...}就像我们看到的一样如果没有元素需要被指定则不需要括号。多个注解可以使用在同一代码上例如类 Annotation (info U a u O)Annotation2 class AnnotatedClass { ... }一些java本身提供的开箱即用的注解我们称之为内建注解。也可以定义你自己的注解称之为子定义注解。我们会在下一章讨论。5. 在什么地方使用注解基本上可以在Java程序的每一个元素上使用类域方法包变量等等。自Java8诞生了通过类型注解的理念。在此之前注解是限于在前面讨论的元素的声明上使用。从此无论是类型还是声明都可以使用注解就像MyAnnotation String str danibuiza;我们将会在Java8关联章节看到这种机制的更多细节。6. 使用案例注解可以满足许多要求最普遍的是向编译器提供信息注解可以被编译器用来根据不同的规则产生警告甚至错误。一个例子是Java8中FunctionalInterface注解这个注解使得编译器校验被注解的类检查它是否是一个正确的函数式接口。文档注解可以被软件应用程序计算代码的质量例如FindBugsPMD或者自动生成报告例如用来Jenkins, JiraTeamcity。代码生成注解可以使用代码中展现的元数据信息来自动生成代码或者XML文件一个不错的例子是JAXB。运行时处理在运行时检查的注解可以用做不同的目的像单元测试JUnit依赖注入Spring校验日志Log4j数据访问Hibernate等等。在这篇手册中我们将展现几种注解可能的用法包括流行的Java类库是如何使用它们的。7. 内建注解Java语言自带了一系列的注解。在本章中我们将阐述最重要的一部分。这个清单只涉及了Java语言最核心的包未包含标准JRE中所有包和库如JAXB或Servlet规范。以下讨论到的注解中有一些被称之为Meta注解它们的目的注解其他注解并且包含关于其它注解的信息。Retention这个注解注在其他注解上并用来说明如何存储已被标记的注解。这是一种元注解用来标记注解并提供注解的信息。可能的值是SOURCE表明这个注解会被编译器忽略并只会保留在源代码中。CLASS:表明这个注解会通过编译驻留在CLASS文件但会被JVM在运行时忽略,正因为如此,其在运行时不可见。RUNTIME表示这个注解会被JVM获取并在运行时通过反射获取。我们会在稍后展开几个例子。Target这个注解用于限制某个元素可以被注解的类型。例如ANNOTATION_TYPE 表示该注解可以应用到其他注解上CONSTRUCTOR 表示可以使用到构造器上FIELD 表示可以使用到域或属性上LOCAL_VARIABLE表示可以使用到局部变量上。METHOD可以使用到方法级别的注解上。PACKAGE可以使用到包声明上。PARAMETER可以使用到方法的参数上TYPE可以使用到一个类的任何元素上。Documented被注解的元素将会作为Javadoc产生的文档中的内容。注解都默认不会成为成为文档中的内容。这个注解可以对其它注解使用。Inherited在默认情况下注解不会被子类继承。被此注解标记的注解会被所有子类继承。这个注解可以对类使用。Deprecated说明被标记的元素不应该再度使用。这个注解会让编译器产生警告消息。可以使用到方法类和域上。相应的解释和原因包括另一个可取代的方法应该同时和这个注解使用。SuppressWarnings说明编译器不会针对指定的一个或多个原因产生警告。例如如果我们不想因为存在尚未使用的私有方法而得到警告可以这样做通常,编译器会因为没调用该方而产生警告; 用了注解抑制了这种行为。该注解需要一个或多个参数来指定抑制的警告类型。Override向编译器说明被注解元素是重写的父类的一个元素。在重写父类元素的时候此注解并非强制性的不过可以在重写错误时帮助编译器产生错误以提醒我们。比如子类方法的参数和父类不匹配或返回值类型不同。SafeVarargs断言方法或者构造器的代码不会对参数进行不安全的操作。在Java的后续版本中使用这个注解时将会令编译器产生一个错误在编译期间防止潜在的不安全操作。更多信息请参考http://docs.oracle.com/javase/7/docs/api/java/lang/SafeVarargs.html8. Java 8 与注解Java8带来了一些优势同样注解框架的能力也得到了提升。在本章我们将会阐述并就java8带来的3个注解做专题说明和举例Repeatable注解关于类型注解的声明函数式接口注解FunctionalInterface与Lambdas结合使用。Repeatable说明该注解标识的注解可以多次使用到同一个元素的声明上。看一个使用的例子。首先我们创造一个能容纳重复的注解的容器/*** Container for the {link CanBeRepeated} Annotation containing a list of values */ Retention( RetentionPolicy.RUNTIME ) Target( ElementType.TYPE_USE ) public interface RepeatedValues {CanBeRepeated[] value(); }接着创建注解本身然后标记RepeatableRetention( RetentionPolicy.RUNTIME ) Target( ElementType.TYPE_USE ) Repeatable( RepeatedValues.class ) public interface CanBeRepeated {String value(); }最后我们可以这样重复地使用CanBeRepeated( the color is green ) CanBeRepeated( the color is red ) CanBeRepeated( the color is blue ) public class RepeatableAnnotated {}如果我们尝试去掉RepeatableRetention( RetentionPolicy.RUNTIME ) Target( ElementType.TYPE_USE ) public interface CannotBeRepeated {String value(); }CannotBeRepeated( info ) /** if we try repeat the annotation we will get an error: Duplicate annotation of non-repeatable type** CannotBeRepeated. Only annotation types marked** Repeatable can be used multiple times at one target.*/ // CannotBeRepeated( more info ) public class RepeatableAnnotatedWrong {}我们会得到编译器的错误信息Duplicate annotation of non-repeatable type自Java8开始我们可以在类型上使用注解。由于我们在任何地方都可以使用类型包括 new操作符castingimplementsthrow等等。注解可以改善对Java代码的分析并且保证更加健壮的类型检查。这个例子说明了这一点SuppressWarnings( unused ) public static void main( String[] args ) {// type defTypeAnnotatedString cannotBeEmpty null;// typeListTypeAnnotated String myList new ArrayListString();// valuesString myString new TypeAnnotated String( this is annotated in java 8 );}// in method params public void methodAnnotated( TypeAnnotated int parameter ) {System.out.println( do nothing ); }所有的这些在Java8之前都是不可能的。FunctionalInterface这个注解表示一个函数式接口元素。函数式接口是一种只有一个抽象方法非默认的接口。编译器会检查被注解元素如果不符就会产生错误。例子如下// implementing its methods SuppressWarnings( unused ) MyCustomInterface myFuncInterface new MyCustomInterface() {Overridepublic int doSomething( int param ){return param * 10;} };// using lambdas SuppressWarnings( unused )MyCustomInterface myFuncInterfaceLambdas ( x ) - ( x * 10 ); }FunctionalInterface interface MyCustomInterface { /** more abstract methods will cause the interface not to be a valid functional interface and* the compiler will thrown an error:Invalid FunctionalInterface annotation;* FunctionalInterfaceAnnotation.MyCustomInterface is not a functional interface*/// boolean isFunctionalInterface();int doSomething( int param ); }这个注解可以被使用到类接口枚举和注解本身。它的被JVM保留并在runtime可见这个是它的声明DocumentedRetention(valueRUNTIME)Target(valueTYPE) public interface FunctionalInterface9. 自定义注解正如我们之前多次提及的可以定义和实现自定义注解。本章我们即将探讨。首先定义一个注解public interface CustomAnnotationClass这样创建了一个新的注解类型名为 CustomAnnotationClass。关键字interface说明这是一个自定义注解的定义。之后你需要为此注解定义一对强制性的属性保留策略和目标。还有一些其他属性可以定义不过这两个是最基本和重要的。它们在第8章描述注解的注解时讨论过它们同样也是Java内建的注解。所以我们为自定义的注解设置属性Retention( RetentionPolicy.RUNTIME ) Target( ElementType.TYPE ) public interface CustomAnnotationClass implements CustomAnnotationMethod在保留策略中 RUNTIME 告诉编译器这个注解应该被被JVM保留并且能通过反射在运行时分析。通过 TYPE 我们又设置该注解可以被使用到任何类的元素上。之后我们定义两个注解的成员Retention( RetentionPolicy.RUNTIME ) Target( ElementType.TYPE ) public interface CustomAnnotationClass {public String author() default danibuiza;public String date();}以上我们仅定义了默认值为“danibuiza”的 author 属性和没有默认值的date属性。我们应强调所有的方法声明都不能有参数和throw子句。这个返回值的类型被限制为之前提过的字符串类枚举注解和存储这些类型的数组。现在我们可以像这样使用刚创建的自定义注解CustomAnnotationClass( date 2014-05-05 ) public class AnnotatedClass { ... }在另一种类似的用法中我们可以创建一种注解方法的注解使用Target METHODRetention( RetentionPolicy.RUNTIME ) Target( ElementType.METHOD ) public interface CustomAnnotationMethod {public String author() default danibuiza;public String date();public String description();}这种注解可以使用在方法声明上CustomAnnotationMethod( date 2014-06-05, description annotated method ) public String annotatedMethod(){return nothing niente; }CustomAnnotationMethod( author friend of mine, date 2014-06-05, description annotated method ) public String annotatedMethodFromAFriend() {return nothing niente; }有很多其它属性可以用在自定义注解上但是 目标 Target和 保留策略Retention Policy是最重要的两个。10. 获取注解Java反射API包含了许多方法来在运行时从类方法或者其它元素获取注解。接口AnnotatedElement包含了大部分重要的方法如下getAnnotations(): 返回该元素的所有注解包括没有显式定义该元素上的注解。isAnnotationPresent(annotation): 检查传入的注解是否存在于当前元素。getAnnotation(class): 按照传入的参数获取指定类型的注解。返回null说明当前元素不带有此注解。class 通过java.lang.Class被实现java.lang.reflect.Method 和 java.lang.reflect.Field所以可以基本上被和任何Java元素使用。现在我们将看一个怎么读取注解的例子我们写一个程序从一个类和它的方法中读取所有的存在的注解public static void main( String[] args ) throws Exception {ClassAnnotatedClass object AnnotatedClass.class;// Retrieve all annotations from the classAnnotation[] annotations object.getAnnotations();for( Annotation annotation : annotations ){System.out.println( annotation );}// Checks if an annotation is presentif( object.isAnnotationPresent( CustomAnnotationClass.class ) ){// Gets the desired annotationAnnotation annotation object.getAnnotation( CustomAnnotationClass.class );System.out.println( annotation );}// the same for all methods of the classfor( Method method : object.getDeclaredMethods() ){if( method.isAnnotationPresent( CustomAnnotationMethod.class ) ){Annotation annotation method.getAnnotation( CustomAnnotationMethod.class );System.out.println( annotation );}} }输出如下com.danibuiza.javacodegeeks.customannotations.CustomAnnotationClass(getInfoInfo, authordanibuiza, date2014-05-05)com.danibuiza.javacodegeeks.customannotations.CustomAnnotationClass(getInfoInfo, authordanibuiza, date2014-05-05)com.danibuiza.javacodegeeks.customannotations.CustomAnnotationMethod(authorfriend of mine, date2014-06-05, descriptionannotated method)com.danibuiza.javacodegeeks.customannotations.CustomAnnotationMethod(authordanibuiza, date2014-06-05, descriptionannotated method)在这个程序中我们可以看到 getAnnotations()方法来获取所有某个对象方法类上的所有注解的用法。展示了怎样使用isAnnotationPresent()方法和getAnnotation()方法检查是否存在特定的注解和如何获取它。11. 注解中的继承注解在Java中可以使用继承。这种继承和普通的面向对象继承几乎没有共同点。如果一个注解在Java中被标识成继承使用了保留注解Inherited说明它注解的这个类将自动地把这个注解传递到所有子类中而不用在子类中声明。通常一个类继承了父类并不继承父类的注解。这完全和使用注解的目的一致的提供关于被注解的代码的信息而不修改它们的行为。我们通过一个例子更清楚地说明。首先我们定义一个自动继承的自定义注解。Inherited Retention(RetentionPolicy.RUNTIME) Target(ElementType.TYPE) public interface InheritedAnnotation {}有一个父类名为AnnotatedSuperClass已经被自定义的注解给注解上了InheritedAnnotation public class AnnotatedSuperClass {public void oneMethod(){}}一个子类继承父类InheritedAnnotation public class AnnotatedSuperClass {public void oneMethod(){}}子类 AnnotatedSubClass 展示了自动继承的注解 InheritedAnnotation。我们看到下面的代码通过 isAnnotationPresent() 方法测试出了当前注解。System.out.println( is true: AnnotatedSuperClass.class.isAnnotationPresent( InheritedAnnotation.class ) );System.out.println( is true: AnnotatedSubClass.class.isAnnotationPresent( InheritedAnnotation.class ) );输出如下is true: trueis true: true我们可以看到子类虽然并没有声明注解但还是被自动地注解上了。如果我们尝试注解在一个接口中InheritedAnnotation public interface AnnotatedInterface {public void oneMethod();}一个实现了该接口的类public class AnnotatedImplementedClass implements AnnotatedInterface {Overridepublic void oneMethod(){}}经过 isAnnotationPresent() 方法测试System.out.println( is true: AnnotatedInterface.class.isAnnotationPresent( InheritedAnnotation.class ) );System.out.println( is true: AnnotatedImplementedClass.class.isAnnotationPresent( InheritedAnnotation.class ) );结果如下is true: trueis true: false这个结果说明继承注解和接口在一起使用时接口中的注解在实现类中仅仅被忽略。实现类并不继承接口的注解接口继承仅仅适用于类继承。正如 AnnotatedSubClass。Inheriated注解仅在存在继承关系的类上产生效果在接口和实现类上并不工作。这条同样也适用在方法变量包等等。只有类才和这个注解连用。一条关于Inheriated注解的很好的解释在Javadoc中http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Inherited.html.注解不能继承注解如果你尝试这么做了就会得到编译器抛出的错误Annotation type declaration cannot have explicit superinterfaces12. 使用注解的知名类库在这一章我们将展示知名类库是如何利用注解的。一些类库如JAXB, Spring Framework, Findbugs, Log4j, Hibernate, Junit。它们使用注解来完成代码质量分析单元测试XML解析依赖注入和许多其它的工作。在这篇手册中我们将讨论以下类库的部分内容12.1. Junit这个框架用于完成Java中的单元测试。自JUnit4开始注解被广泛应用成为Junit的设计的主干之一。基本上JUnit处理程序通过反射读取类和测试套件按照在方法上类上的注解顺序地执行它们。当然还有一些用来修改测试执行的注解。其它注解都用来执行测试阻止执行改变执行顺序等等。用到的注解相当多但是我们将会看到最重要的几个Test这个注解向JUnit说明这个被注解的方法一定是一个可执行的测试方法。这个注解只能标识在方法上并且被JVM保留至运行时。Test public void testMe() {//test assertionsassertEquals(1,1); }从这个例子可以看到我们如何在JUnit中使用这类注解。Before这个注解用来向JUnit说明被标记的方法应该在所有测试方法之前被执行。这对于在测试之前设置测试环境和初始化非常有用。同样只适用于方法上Before public void setUp(){// initializing variablescount 0;init(); }After这个注解用来向JUnit说明被注解的方法应该在所有单元测试之后执行。这个注解通常用来销毁资源关闭释放资源或者清理重置等工作。After public void destroy() {// closing input streamstream.close(); }Ignore这个方法用来向JUnit说明被注解的方法应该不被当作测试单元执行。即使它被注解成为一个测试方法也只能被忽略。Ignore Test public void donotTestMe() {count -22;System.out.println( donotTestMe(): count ); }这个方法可能在在开发调试阶段使用但一旦开始进入发布阶段变需要将被忽略的代码去掉。FixMethodOrder指定执行的顺序正常情况下Junit处理程序负责它按照完全随机的无法预知的顺序执行。当所有的测试方法都相互独立的时候不推荐使用这个注解。但是当测试的场景需要测试方法按照一定规则的时候这个注解就派上用场了。还有一些测试套件和类库使用了注解例如Mockito和JMock使用注解来创建测试对象和预期值。 查看JUnit中所有注解请参考https://github.com/junit-team/junit/wiki/Getting-startedColumn( name description ) private String description;12.2. Hibernate ORMHibernate可能是一个用得最广泛的对象关系映射类库。它提供了对象模型和关系型数据库的映射框架。使用注解作为设计的一部分。在本章我们将讨论一两个由Hibernate提供的注解并解释它的处理程序如何处理它们。下面的代码段使用了Entity和Table。这两个是用来向消费器Hibernate处理程序说明被注解的类是一个实体类以及它映射的SQL表名。实际上这个注解仅仅是指明了主表还可以有说明字表的注解。123EntityTable( name hibernate_annotated )public class HibernateAnnotated接下来的代码段展示了如何向Hibernate处理程序说明被标记的元素是表的主键并映射名为“id”的列并且主键是自动生成的。1234IdGeneratedValueColumn( name id )private int id;span stylecolor: #000000;为了指定标准的SQL表列名我们可以写如下注解/span这说明被标记的元素映射的是这个类所对应的表中名为“description”的一列。这些注解都来自 http://docs.oracle.com/javaee/6/api/javax/persistence/package-summary.html 企业级Java的包。它们几乎涵盖了所有 Hibernate 所有可用的注解。12.3. Spring MVCSpring是个被广泛使用的Java企业级应用框架。其一项重要的特性就是在Java程序使用依赖注入。Spring使用注解作为XMLSpring的早期版本使用的基于XML配置的一种替代方式。现在两者都是可行的。你可以使用XML文件或者注解配置你的项目。在我看来两者都各有优势。我们将在下例中展示两个可用注解Component public class DependencyInjectionAnnotation {private String description;public String getDescription(){return description;}Autowiredpublic void setDescription( String description ){this.description description;}}在次代码片段中我们可以找到两个使用在了类和方法上的注解。Component说明被标记的元素在本例中是一个类是一个自动检测的目标。这意味着被注解的类将会被Spring容器实例化并管理。AutowiredSpring容器将会尝试通过类型这是一种元素匹配机制使用这个set方法来自动装配。此注解也可以使用在构造器和属性上Spring也会根据注解的地方不同采取不同的操作。更多关于依赖注入和Spring框架的细节请参考http://projects.spring.io/spring-framework/.12.4. Findbugs这是一个用来测量代码质量并提供一系列可能提高它的工具。它会根据预定义或者自定义的违反规则来检查代码。Findbugs提供一系列注解来允许开发者来改变默认行为。它主要使用反射读取代码和包含的注解并决定基于它们应该采取什么行为。一个列子是 edu.umd.cs.findbugs.annotations.SuppressFBWarnings 注解期待一种违反规定的键值并把它当作参数。这非常像 java.lang.SuppressWarnings。被用来向 Findbugs 说明当执行代码分析的时候忽略指定的违反规则。这是一个例子SuppressFBWarnings( HE_EQUALS_USE_HASHCODE ) public class FindBugsAnnotated {Overridepublic boolean equals( Object arg0 ){return super.equals( arg0 );}}这个类已经重现了 Object 的 equals 方法但是并没有重写 hashCode 方法。这通常会导致问题因为 hashCode 和 equals 两者应该被同时重写否则在使用这个对象作为 HashMap 的key值的时候会导致错误。所以Findbugs会在违反规则报告中创造一个错误条目。如果注解 SuppressFBWarnings 设置了 HE_EQUALS_USE_HASHCODE 值以后处理程序就不会在抛出这类型的错误了。Bug: com.danibuiza.javacodegeeks.findbugsannotations.FindBugsAnnotated defines equals and uses Object.hashCode() Bug: com.danibuiza.javacodegeeks.findbugsannotations.FindBugsAnnotated defines equals and uses Object.hashCode()这个类重写了 equals 方法但是没有重写 hashCode 方法继承自 java.lang.Object 的 hashCode 方法返回每个对象被JVM赋予的特定值。因此这个类几乎违反了相同的对象必须 hashcode 相同的一致性。如果你认为这个类的实例不会插入到哈希表推荐的做法是像这样实现 hashCode 方法public int hashCode() {assert false : hashCode not designed;return 42; // any arbitrary constant will do}Rank: Troubling (14), confidence: High Pattern: HE_EQUALS_USE_HASHCODE Type: HE, Category: BAD_PRACTICE (Bad practice)这个错误包含了该问题的一种解释并且提示如何处理它。在这种情况下解决方案应该是实现 hashCode 方法。想知道FindBugs在 SuppressFBWarnings 注解所有可用的违反规则设置请参考http://findbugs.sourceforge.net/bugDescriptions.html.12.5. JAXBJAXB是一个用来相互转换和映射XML文件与Java对象的类库。实际上这个类库与标准JRE一起提供不需要任何额外的下载和配置。可以直接通过引入 java.xml.bind.annotation 包下的类直接使用。JAXB使用注解来告知处理程序或者是JVMXML文件与代码的相互转化。例如注解可以用来在代码上标记XML节点XMl属性值等等。我们将看到一个例子首先我们声明一个类说明它应该是XML文件中的一个节点import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; XmlType( propOrder { brand, model, year, km } ) XmlRootElement( name Car ) class Car ...使用注解XmlTypeXmlRoootElement。它们用来告知 JAXB 处理程序 Car 这个类在转换后将会转换成为XML中的一个节点。这个XmlType说明了属性在XML中的顺序。JAXB将会基于这些注解执行合适的操作。除了分离的 getter 和 setter 属性再也不需要向这个类中添加其它东西来完成转换。现在我们需要一个消费器程序来执行转换成XMLCar car new Car(); car.setBrand( Mercedes ); car.setModel( SLK ); car.setYear( 2011 ); car.setKm( 15000 );Car carVW new Car(); carVW.setBrand( VW ); carVW.setModel( Touran ); carVW.setYear( 2005 ); carVW.setKm( 150000 );/* init jaxb marshaler */ JAXBContext jaxbContext JAXBContext.newInstance( Car.class ); Marshaller jaxbMarshaller jaxbContext.createMarshaller();/* set this flag to true to format the output */ jaxbMarshaller.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, true );/* marshaling of java objects in xml (output to standard output) */ jaxbMarshaller.marshal( car, System.out ); jaxbMarshaller.marshal( carVW, System.out );程序产生的输入如下?xml version1.0 encodingUTF-8 standaloneyes? 02 CarbrandMercedes/brandmodelSLK/modelyear2011/yearkm15000/km /Car ?xml version1.0 encodingUTF-8 standaloneyes? CarbrandVW/brandmodelTouran/modelyear2005/yearkm150000/km /Car更多关于JAXB XML和Java 的转换信息请参考https://jaxb.java.net/13. 总结在这篇文档中我们解释了Java注解是Java1.5开始一个非常重要的特性。基本上注解都是作为包含代码信息的元数据而被标记到代码中。它们不会改变或者影响代码的任何意义而是被第三方称为消费器的程序通过反射的方式使用。我们列出了Java默认的内建注解一些称为元注解例如Target或者 Retention又有OverrideSuppressWarnings还有一些Java8相关的注解比如RepeatableFunctionalInterface和类型注解。我们还展现了一两个结合使用反射的例子并描述了一些使用注解的类库例如Spring JunitHibernate。注解是Java中一种分析元数据的强大机制可以在不同的程序中担任不同的作用例如校验依赖注入单元测试。14. 下载这是一个java注解的教程。你可以从这里下载本教程所有代码: customAnnotations15. 资料这是一些非常有用的关于Java注解的资料官方Java注解地址http://docs.oracle.com/javase/tutorial/java/annotations/维基百科中关于Java注解的解释http://en.wikipedia.org/wiki/Java_annotationJava规范请求250http://en.wikipedia.org/wiki/JSR_250Oracle 注解白皮书http://www.oracle.com/technetwork/articles/hunter-meta-096020.html注解APIhttp://docs.oracle.com/javase/7/docs/api/java/lang/annotation/package-summary.html
http://www.zqtcl.cn/news/435180/

相关文章:

  • flash 网站建设建设带数据搜索的网站
  • 设计网站网站名称云主机 小型网站
  • 网站建设方案书 模版公司制作网站收费标准
  • 福州企业网站html模板网站模板下载
  • 湛江自做网站城乡住建局官网
  • 广东网站建设找自己做网站还有出路吗
  • wordpress后台管理地址更改班级优化大师怎么用
  • 电脑网站开发学习产品怎么做市场推广
  • 上海市网站建设公叿目前流行的app网站开发模式
  • 企业手机网站建设效果wordpress栏目链接地址
  • 产品经理做网站网络公司名字免费起名大全
  • 做得比较好的公司网站kol营销
  • 百度指数分析平台长春seo优化企业网络跃升
  • 如何免费做网站域名wordpress 赚钱
  • 苏州市住房建设局网站首页温州网站设计公司
  • 网站模板哪个好用汕头建设工程总公司
  • iis网站重定向软件开发培训机构排名
  • 浙江大学教室办事大厅网站建设网页棋牌搭建
  • 长沙市天心区建设局网站新河网站
  • 网站改版 升级的目的嘉兴海盐县城乡建设局网站
  • 网站建设一年多少钱上海工程建设交易信息网站
  • 网站推广到底应该怎么做中国建设银行网上登录入口
  • 东莞网站建设服务商wordpress页面样式
  • 亿星网站建设创业网站怎么做
  • 绿韵建设有限公司网站重庆景点分布图
  • 咨询类网站模板wordpress怎样切换语言
  • 大连网站建设与维护题库网站建设目标是
  • 威海网站开发询广西南宁网站运营
  • 网站的素材做logo长沙专业的网站建设企业
  • 网站显示速度的代码是什么情况专门做中式服装平台的网站