【Dart】Dart로 자작 어노테이션의 작성은 가능한가?

6208 단어 포켓몬Dart
단도 직입, Dart 언어로 Java 언어와 같은 「자작 어노테이션」을 작성하는 것은 가능한 것일까?
→ 결론 : 가능

이번에는 「포켓몬」의 재료를 베이스로 Dart 언어로 자작 어노테이션을 작성해 보았다.
작성하는 어노테이션은 다음과 같이 도감 번호 등이 정의되어 있는 어노테이션.

■ 포켓몬 어노테이션(PokemonAnnotation)
  • 도감 번호: int형
  • 포켓몬명:String형
  • 종족치:List(int)형

  • 샘플 코드



    포켓몬 「정치」 「란턴」의 도감 번호, 이름, 종족치를 콘솔상에 출력하는 샘플.
    자신의 클래스를 리플렉션하는 것으로, 계승 클래스의 대응도 가능.

    Main.dart
    import 'dart:mirrors';
    import 'PokemonAnnotation.dart';
    
    void main() {
      Chinchou().printPokemonData();
      Lanturn().printPokemonData();
    }
    
    @PokemonAnnotation(170, "チョンチー", [75, 38, 38, 56, 56, 67])
    class Chinchou {
      void printPokemonData() {
        ClassMirror classMirror = reflectClass(this.runtimeType); // 自身のクラスをリフレクション
        int dexNumber = classMirror.metadata.first.reflectee.pokemonDexNumber;
        String name = classMirror.metadata.first.reflectee.pokemonName;
        List<int> baseStats = classMirror.metadata.first.reflectee.pokemonBaseStats;
    
        print(dexNumber);
        print(name);
        print(baseStats);
      }
    }
    
    @PokemonAnnotation(171, "ランターン", [125, 58, 58, 76, 76, 67])
    class Lanturn extends Chinchou {
      // Chinchouクラス継承
    }
    

    PokemonAnnotation.dart
    library PokemonAnnotation;
    
    class PokemonAnnotation {
      final int pokemonDexNumber;
      final String pokemonName;
      final List<int> pokemonBaseStats;
      const PokemonAnnotation(
          this.pokemonDexNumber, this.pokemonName, this.pokemonBaseStats);
    }
    

    실행 결과



    포켓몬 '정치' '런턴' 도감번호, 이름, 종족값이 콘솔에 출력됐다.
    170
    チョンチー
    [75, 38, 38, 56, 56, 67]
    171
    ランターン
    [125, 58, 58, 76, 76, 67]
    Exited
    



    감상



    Java 언어로 자작 어노테이션을 작성하는 것이 있었기 때문에, Dart 언어에서도 마찬가지로 작성할 수 있는 것은 고맙다.
    「Dart 언어로 자작 어노테이션 작성할 수 없는가?」라고 하는 의문으로부터 조사해 보았지만, 참고가 되는 자료가 생각했던 것보다 발견되지 않았기 때문에, 메모용으로서 본 기사를 남겨 둔다. (조사 방법이 나쁜 것일지도 모르지만 ...)

    좋은 웹페이지 즐겨찾기