注釈+列挙型

注釈+列挙型

1つ、列挙

  1. 列挙の定義?

    列挙型:列挙型一部のプログラムで固定値を表すキーワードenumは、Java5.0以降で提案されているタイプです。

    列挙は、プログラム内の固定値を列挙することです。

  2. 列挙型を作成しますか?
    //和类对照着看
    //枚举本身不是类,但是我们可以看作是一个类来使用
    class A{
          
          }
    
    //枚举最大得特征就是属性全部大写
    enum A{
          
          
        RED,YELLOW,GREEN;
    }
    
  3. 列挙型の使用?
    1. 列挙型がswitchcaseに渡されます

      	@Test
          public void testEnum(){
              
              
              System.out.println(Color.RED);
              Color c = Color.RED;
              switch (c){
              
              
                  case GREEN:
                      System.out.println("绿灯");break;
                  case RED:
                      System.out.println("红灯");break;
                  case YELLOW:
                      System.out.println("黄灯");break;
              }
              System.out.println(Color.valueOf("RED")==Color.RED);
              System.out.println(Color.values()[0]+"\t"+Color.values()[1]+"\t"+Color.values()[2]);
              Color.RED.show();
          }
          
      
    2. valueOf(“”):文字列を対応する列挙型に変換します

    3. values()[0]:列挙値を配列の形式で入力し、最初の値を返します

    4. 列挙はすべての可能性を列挙することであり、列挙の構築方法は個人的に変更されているため、外部はもはや新しいものではありません

    5. 列挙型の属性、タイプは列挙型自体の修飾子public static final

    6. さらに、列挙型のtoString()メソッドが書き直され、列挙型プロパティを直接出力して取得した文字列が追加されました。

  4. 列挙されたアプリケーション?
    1. フレームワークは同じですが、個々の属性が異なり、列挙としてカプセル化できます

      package com.etoak.enums;
      
      public enum Teacher {
              
              
          WL("二爷","易途COREJAVA讲师","人气颇高的美女讲师,授课严谨细致、脉络清晰,讲解声情并茂,善于拓展延伸,亲和力强,对待教学认真负责,要求严格,循循善诱,平易近人,不厌其烦,细心讲解,经验丰富,深入浅出,逻辑性强,善于总结归纳重点和难点。负责Java核心技术的教学,是无数易途学员的启蒙老师")
          ,
          QP("薄老师","DB","四年开发经验,曾在胜利油田项目中负责数据库迁移,并在中国移动旗下咪咕阅读参与数据库方案设计,数据实时推送,还在建筑,金融,电商,智能警务等多个行业积累了Oracle丰富的实战经验,并将整个课程都与现实工作紧密结合起来,负责Oracle数据库教学。");
          private String name;
          private String title;
          private String info;
      
          Teacher(String name, String title, String info) {
              
              
              this.name = name;
              this.title = title;
              this.info = info;
          }
      
          public String getName() {
              
              
              return name;
          }
      
          public String getTitle() {
              
              
              return title;
          }
      
          public String getInfo() {
              
              
              return info;
          }
      }
      
    2. 応答コンテンツの組み立てにも使用できます

      /*
      响应返回的样子
      * {
      *   code:200 50900
      *   msg:"",
      *   data:{}
      *
      * class ETResponse{
      *   int code;
      *   String msg;
      *   Object data;
      *   setter/getter
      * }
      
      
      定义枚举 列举出所有可能性
      * enum  ETStatus{
      *       SUCCESS(200,"invoke success"),FAIL(300,"invoke fail"),
      *       SERVER_ERROR(500,"server error");
      *         int code;
      *       String msg;
      *   private ETStatus(int code,String msg){
      *   this.code = code;
      *   this.msg = msg;
      *
      *   }
      *       getter..
      *}
      
      
      * StudentController{
      *   public ETResponse queryAllSchs(){
      *       List<School> schs = n....
              ETResponse response = new ETResponse();
              response.setCode(SUCCESS/FAIL/ERROR/..)200
              resposne.setCode(ETStatus.SUCCESS.getCode())
              response.setMsg()
              response.setData(变化);
      *  }
      * }
      * }
      

2.注釈

  1. アノテーションの紹介?
    1. アノテーションの作成時に使用されるアノテーションキーワード@interface
    2. 一般的に書かれている:クラス、属性、メソッド、パラメータ
    3. アノテーションには、アノテーションタイプ自体とレスポンスのハンドラーが含まれます。
  2. これまでに見た注釈は?
    1. Mybatis

      @Parm:アセンブルされたマップのキー名をoutputメソッドパラメーターに設定します

      @Alias:クラスにエイリアスを与える

    2. サーブレット

      @WebServlet:ホットデプロイメント

      @WebFIlter:フィルター

      @WebListener:リスナー

      1. オブジェクトを作成します。

        @ Component、@ Controller、@ Service、@ Repository

      2. 属性への値の割り当て:

        @Autowired + @Qulifier @Resource @Value

      3. @Configration @ConponentScan

      4. @RequstMapping(インターセプトリクエスト)、@ ResponseBody(レスポンスコンテンツをjson形式にアセンブル)

    3. JUnit

      @Test:ユニットテスト

  3. Java.lang.annotationパッケージのアノテーションから

    以下のアノテーションはアノテーション用です。上記のアノテーションをロードしてください。

    1. @Target:表示注解可以用在哪些程序元素上
        //这里就是枚举
        value=ElementType.METHOD  方法
        	 =ElementType.FIELD  属性
        	 =ElementType.TYPE  其他类、接口
             =ElementType.PARAMETER  参数
    
    2. @Retention:注解的保留策略
        	一般注解写在源码中 编译之后保存到class文件中,但是运行期间,JVM加载类时,会把注解信息擦除
        value=RetentionPolicy.SOURCE  保存在源码中(.java文件)
        	 =RetetnionPolicy.CLASS   class文件 默认的
        	 =RetentionPolicy.RUNTIME   运行时加载
        
    3. @Document:是否把注解信息生成到API文档中
        
    4. @Override:重写注解,此注解的保留策略必然是SOURCE
        因为它只是在编译时检查是否完成重写,编译之后不需要存在了
    
    
  4. カスタムアノテーション?
    public @interface Etoak{
          
          
        //注解中的属性  default给默认值
        Stirng value() default "";
    }
    
    //使用时
    1. value属性
        @Etoak("haha") 此处就是给value属性赋值 
        value可以省略:如果注解属性名字是value,则在使用注解给value赋值时 可以省略value
    
    2. 注解中可以放枚举
        RequestMethod.GET:枚举,表示可以接收什么请求 可以是个数组 表示接收多个请求
        @RequstMapping(value="query",method={
          
          RequestMethod.GET,RequestMethod.POST})
            
    3. 注解中可以放注解
            
        @WebServlet(value="/stu",name="xxx",
            initParams ={
          
          @WebInitParam(name="ContextConfigLocation",
            value="/WEB-INF/applicationContext.xml")} )
        
            
            initParams属性,放置的servlet初始化参数
            
            相当于:
    <servlet>
        <servlet-name>xxx</servlet-name>
        <servlet-class>Test</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml</param-value>
        </init-param>
    </servlet>
            
     <servlet-mapping>
        <servlet-name>xxx</servlet-name>
        <url-pattern>/stu</url-pattern>
    </servlet-mapping> 
    
  5. 手書きのJUnitテストクラス

    JUnitユニットテストの原則:

    @Testをメソッドに追加すると、mainメソッドがトリガーされます。つまり、@ Testアノテーションにmainメソッドが含まれます。

    ステップ:

    1. まず、現在のクラスのClassオブジェクトを取得する必要があります。

    2. 次に、このクラスオブジェクトのすべてのメソッドを取得しますcls.getDeclaredMethods()

    3. すべてのメソッドでアノテーションを取得しますgetDeclaredAnnotations

      使用する必要のあるアノテーションは、java.lang.annotationパッケージの上記のアノテーションです。

      @Retention(RUNTIME)を追加して、保持ポリシーを実行時に設定します

    4. アノテーションがカスタムアノテーションであるかどうかを判断するには、必要に応じてinvoke(new XXX())を呼び出します。

      ここで、新しいXXX()は、mainメソッドを使用してオブジェクトを作成することを意味します

     public static void main(String[] args) throws Exception{
          
          
            //main
            Class cls = Test.class;
            Annotation [] ans = cls.getDeclaredAnnotations();
            for(Annotation an:ans){
          
          
                if(an.annotationType()==Etoak.class){
          
          
                    //1.created
                    Object obj = cls.newInstance();
                    //2.init
                    Method[] ms = cls.getDeclaredMethods();
                    for(Method m:ms){
          
          
                        Annotation[] as = m.getDeclaredAnnotations();
                        for(Annotation a:as){
          
          
                            if(a.annotationType() ==PostConstruct.class){
          
          
                                m.invoke(obj);
                            }
                            //doSth..
                            if(a.annotationType()==PreDestroy.class){
          
          
                                m.invoke(obj);
                            }
                        }
                    }
                }
            }
    

おすすめ

転載: blog.csdn.net/G7581/article/details/115018767