Item 39ネーミングモードと比較して、アニメーションを使用
11080 ワード
ネーミング・モードの欠点
トレーニングは以上のすべての問題を解決します。
コード39-1タグタイプ宣言
import java.lang.annotation.*;
/**
* 테스트 메서드임을 선언하는 애너테이션인다.
* 매개변수 없는 정적 메서드 전용이다.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Test {
}
@Reentionや@Targetなど宣言中の注釈をメタ注釈と呼ぶ.
@Reention(保存ポリシー.RUNTIME)メタデータは、@Testが実行時にも保持する必要があることを示します.
このメタデータを省略すると、テストツールは@Testを認識できません.
一方,@Target(ElementType.METHOD)メタデータは,@Testがメソッド宣言のみで使用される必要があることを示している.
したがって、クラス宣言、フィールド宣言などの他のプログラム要素と一致することはできません.
サンプルコード39-2タグ説明
public class Sample {
@Test public static void m1() { } // 성공해야 한다.
public static void m2() {}
@Test public static void m3() { // 실패해야 한다.
throw new RuntimeException("실패");
}
public static void m4() {}
@Test public void m5() { } // 잘못 사용한 예: 정적 메서드가 아니다.
@Test public static void m7() { // 실패해야 한다.
throw new RuntimeException("실패");
}
public static void m8() {}
処理コード39-3タグ説明のプログラムimport java.lang.reflect.*;
public class RunTests {
public static void main(String[] args) throws Exception {
int tests = 0;
int passed = 0;
Class<?> testClass = Class.forName(args[0]);
for (Method m : testClass.getDeclaredMethods()) {
if(m.isAnnotationPresent(Test.class)) {
test++;
try {
m.invoke(null);
passed++;
} catch (InvocationTargetException wrappedExc) {
Throwable exc = wrappedExc.getCause();
System.out.println(m + " 실패: " + exc);
} catch (Exception exc) {
System.out.println("잘못 사용한 @Test: " + m);
}
}
}
System.out.printf("성공: %d, 실패: %d%n", passed, tests-passed);
}
}
中略アニメーションでできることをネーミングモードで処理する理由はありません.
Javaプログラマーの場合は、Javaが提供するプレゼンテーションタイプを使用します.
Reference
この問題について(Item 39ネーミングモードと比較して、アニメーションを使用), 我々は、より多くの情報をここで見つけました https://velog.io/@wlghsp/Item-39-명명-패턴보다-애너테이션을-사용하라テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol