|
117 | 117 | + [Предположим, есть метод, который может выбросить `IOException` и `FileNotFoundException` в какой последовательности должны идти блоки `catch`? Сколько блоков `catch` будет выполнено?](#Предположим-есть-метод-который-может-выбросить-ioexception-и-filenotfoundexception-в-какой-последовательности-должны-идти-блоки-catch-Сколько-блоков-catch-будет-выполнено) |
118 | 118 | + [Что если исключение появится в try блоке и в finally](#Что-если-исключение-появится-в-try-блоке-и-в-finally) |
119 | 119 | + [Подавленные исключения](#Подавленные-исключения) |
| 120 | ++ [Как создать аннотацию?](#Как-создать-аннотацию) |
120 | 121 | + [Что такое _generics_?](#Что-такое-generics) |
121 | 122 | + [Ковариантность, контравариантность и инвариантность](#Ковариантность-контравариантность-и-инвариантность) |
122 | 123 | + [Wildcards](#Wildcards) |
@@ -1524,6 +1525,26 @@ public class Example implements AutoCloseable{ |
1524 | 1525 | ``` |
1525 | 1526 | Даже, если в методе close() будет сгенерировано исключение и оно добавится к подавленным исключения для блока try, все они заменятся исключением, которое будет сгенерировано блоком finally. |
1526 | 1527 |
|
| 1528 | +## Как создать аннотацию? |
| 1529 | +Как видно из примера выше, аннотация определяется описанием с ключевым словом interface и может включать в себя несколько полей, которые можно задать как обязательными, так и не обязательными. В последнем случае подставляется default значение поля. |
| 1530 | + |
| 1531 | +Аннотация @Target указывает, что именно мы можем пометить этой аннотацией, это может быть поле, метод, тип и т.д. |
| 1532 | + |
| 1533 | +Аннотация @Retention позволяет указать жизненный цикл аннотации: будет она присутствовать только в исходном коде, в скомпилированном файле, или она будет также видна и в процессе выполнения. Выбор нужного типа зависит от того, как вы хотите использовать аннотацию, например, генерировать что-то побочное из исходных кодов, или в процессе выполнения стучаться к классу через reflection. |
| 1534 | + |
| 1535 | +Аннотация @Inherited помечает аннотацию, которая будет унаследована потомком класса, отмеченного такой аннотацией. |
| 1536 | + |
| 1537 | +```java |
| 1538 | +import java.lang.annotation.*; |
| 1539 | +@Target(value=ElementType.FIELD) |
| 1540 | +@Retention(value= RetentionPolicy.RUNTIME) |
| 1541 | +public @interface Name { |
| 1542 | + String name(); |
| 1543 | + String type() default “string”; |
| 1544 | +} |
| 1545 | +``` |
| 1546 | +[к оглавлению](#java-core) |
| 1547 | + |
1527 | 1548 | ## Что такое _generics_? |
1528 | 1549 | __Generics__ - это технический термин, обозначающий набор свойств языка позволяющих определять и использовать обобщенные типы и методы. Обобщенные типы или методы отличаются от обычных тем, что имеют типизированные параметры. |
1529 | 1550 |
|
|
0 commit comments