Download 30 - Java Reflection API/002 Annotations_en.srt from Tan115/java-development-for-beginners-learnit: direct link, hf CLI and curl.
- Browser
- Download file 25.9 kB
-
https://huggingface.co/Tan115/java-development-for-beginners-learnit/resolve/main/30%20-%20Java%20Reflection%20API/002%20Annotations_en.srt
- Command line
-
hf download 'hf://Tan115/java-development-for-beginners-learnit/30 - Java Reflection API/002 Annotations_en.srt'
-
curl -L -o '002 Annotations_en.srt' https://huggingface.co/Tan115/java-development-for-beginners-learnit/resolve/main/30%20-%20Java%20Reflection%20API/002%20Annotations_en.srt
25.9 kB
| 1 | |
| 00:00:06,000 --> 00:00:06,000 | |
| Hello, Jim. | |
| 2 | |
| 00:00:06,000 --> 00:00:12,000 | |
| Today we're going to learn with you what annotations are, how to work with them and how to create new | |
| 3 | |
| 00:00:12,000 --> 00:00:12,000 | |
| ones. | |
| 4 | |
| 00:00:12,000 --> 00:00:18,000 | |
| Before we start this lesson, I must say that it is critically important you watching previous lesson | |
| 5 | |
| 00:00:18,000 --> 00:00:20,000 | |
| about Reflection API. | |
| 6 | |
| 00:00:20,000 --> 00:00:26,000 | |
| If you skip that one, please make sure you watch it, because in this lesson, we are going to use | |
| 7 | |
| 00:00:26,000 --> 00:00:29,000 | |
| Réflexion API to work with annotations. | |
| 8 | |
| 00:00:29,000 --> 00:00:35,000 | |
| Basically, there is not so much as a ways for us to take advantage from annotations without knowing | |
| 9 | |
| 00:00:35,000 --> 00:00:36,000 | |
| the Reflection API. | |
| 10 | |
| 00:00:37,000 --> 00:00:39,000 | |
| In this lesson, we're going to learn everything. | |
| 11 | |
| 00:00:39,000 --> 00:00:45,000 | |
| The related to annotations will start from the definition of annotation, make you understand what annotations | |
| 12 | |
| 00:00:45,000 --> 00:00:47,000 | |
| are on the standard banner. | |
| 13 | |
| 00:00:47,000 --> 00:00:53,000 | |
| We are going to discuss use cases when annotations may be applied and for what purposes. | |
| 14 | |
| 00:00:53,000 --> 00:00:57,000 | |
| After that, we will start reviewing of the source code examples. | |
| 15 | |
| 00:00:57,000 --> 00:01:02,000 | |
| I will explain you what targets annotation is and what retention annotation is. | |
| 16 | |
| 00:01:02,000 --> 00:01:09,000 | |
| We are going to create our own custom annotation and you are going to understand how to create it and | |
| 17 | |
| 00:01:09,000 --> 00:01:09,000 | |
| process it. | |
| 18 | |
| 00:01:10,000 --> 00:01:15,000 | |
| And at the end of the lesson, I will also explain you how to create repeatable annotations. | |
| 19 | |
| 00:01:15,000 --> 00:01:16,000 | |
| Let's stop. | |
| 20 | |
| 00:01:17,000 --> 00:01:20,000 | |
| And the first question that we have to answer sounds like this. | |
| 21 | |
| 00:01:21,000 --> 00:01:22,000 | |
| What is annotation? | |
| 22 | |
| 00:01:22,000 --> 00:01:27,000 | |
| Annotation as a form of metadata provides data about programs. | |
| 23 | |
| 00:01:27,000 --> 00:01:30,000 | |
| It is not part of the program itself. | |
| 24 | |
| 00:01:30,000 --> 00:01:35,000 | |
| Annotations have no direct effect on the operation of the court. | |
| 25 | |
| 00:01:35,000 --> 00:01:38,000 | |
| They annotate the understands this definition. | |
| 26 | |
| 00:01:39,000 --> 00:01:40,000 | |
| The know what is metadata. | |
| 27 | |
| 00:01:41,000 --> 00:01:50,000 | |
| Metadata is a data that provides information about other data or similar data about data in program, | |
| 28 | |
| 00:01:50,000 --> 00:01:57,000 | |
| and we can annotate types, colossus and interfaces, fields, masses, parameters, constructors, | |
| 29 | |
| 00:01:57,000 --> 00:02:01,000 | |
| local variables, packages, modules and others. | |
| 30 | |
| 00:02:01,000 --> 00:02:04,000 | |
| We can even annotate annotation itself. | |
| 31 | |
| 00:02:05,000 --> 00:02:11,000 | |
| Basically, there might be cases when you need to provide more information about your code and use this | |
| 32 | |
| 00:02:11,000 --> 00:02:18,000 | |
| information on different stages on the level of the source code during compilation and at this stage | |
| 33 | |
| 00:02:18,000 --> 00:02:18,000 | |
| of the runtime. | |
| 34 | |
| 00:02:19,000 --> 00:02:25,000 | |
| Late in the lesson we are going to learn this case are some examples I will show you where notation | |
| 35 | |
| 00:02:25,000 --> 00:02:29,000 | |
| can be applied and how long it will be retained. | |
| 36 | |
| 00:02:29,000 --> 00:02:36,000 | |
| You already understood what metadata is and what annotation is, but probably it is still not clear | |
| 37 | |
| 00:02:36,000 --> 00:02:42,000 | |
| for you how this can be helpful and when we need to use annotations in which cases. | |
| 38 | |
| 00:02:42,000 --> 00:02:45,000 | |
| The first one is information for the compiler. | |
| 39 | |
| 00:02:46,000 --> 00:02:53,000 | |
| Annotations can be used by the compiler to detect errors or suppress warnings, for example, such popular | |
| 40 | |
| 00:02:53,000 --> 00:02:54,000 | |
| annotation as override. | |
| 41 | |
| 00:02:55,000 --> 00:03:02,000 | |
| I am sure you used it already is on purpose or it just added it instead of you overwrite annotation | |
| 42 | |
| 00:03:02,000 --> 00:03:05,000 | |
| discarded by the compiler during the compilation. | |
| 43 | |
| 00:03:05,000 --> 00:03:09,000 | |
| And there is a specific purpose of this net information. | |
| 44 | |
| 00:03:09,000 --> 00:03:14,000 | |
| As you remember, annotation tells us that this method should override method from parent type. | |
| 45 | |
| 00:03:15,000 --> 00:03:22,000 | |
| Thus, there are specific requirements to access modify which that matter signature and the list of | |
| 46 | |
| 00:03:22,000 --> 00:03:23,000 | |
| potential exceptions. | |
| 47 | |
| 00:03:23,000 --> 00:03:32,000 | |
| There is a logical place in juju that analyzes this matter information basically for all methods marked | |
| 48 | |
| 00:03:32,000 --> 00:03:34,000 | |
| with overrides, this logic is applied. | |
| 49 | |
| 00:03:35,000 --> 00:03:37,000 | |
| Compile time and deployment time. | |
| 50 | |
| 00:03:37,000 --> 00:03:45,000 | |
| Processing software tools can process annotation information to generate code, XML files and so forth. | |
| 51 | |
| 00:03:45,000 --> 00:03:51,000 | |
| For example, such book in the library and do as number in case you have never worked with. | |
| 52 | |
| 00:03:51,000 --> 00:03:51,000 | |
| No. | |
| 53 | |
| 00:03:52,000 --> 00:03:53,000 | |
| I will tell you about it. | |
| 54 | |
| 00:03:53,000 --> 00:03:59,000 | |
| It generates getters and setters for you and also helps you with generating other things. | |
| 55 | |
| 00:04:00,000 --> 00:04:05,000 | |
| This mechanism also built on top of annotations and reflection API. | |
| 56 | |
| 00:04:05,000 --> 00:04:12,000 | |
| Basically, you can annotate type was information about methods if you need to be generated, for example. | |
| 57 | |
| 00:04:12,000 --> 00:04:19,000 | |
| And when you compile your application and upload classes into Java, those masses that you want it to | |
| 58 | |
| 00:04:19,000 --> 00:04:21,000 | |
| be generated are there on place. | |
| 59 | |
| 00:04:22,000 --> 00:04:23,000 | |
| Is that clear? | |
| 60 | |
| 00:04:24,000 --> 00:04:27,000 | |
| And that's a use case of using annotations is runtime processing. | |
| 61 | |
| 00:04:28,000 --> 00:04:31,000 | |
| Some annotations are available to be excellent at runtime. | |
| 62 | |
| 00:04:32,000 --> 00:04:35,000 | |
| You can set configuration to retain annotations. | |
| 63 | |
| 00:04:35,000 --> 00:04:39,000 | |
| Zero zero runtime I will show you is this an example? | |
| 64 | |
| 00:04:39,000 --> 00:04:41,000 | |
| But let's understand why do we need this? | |
| 65 | |
| 00:04:42,000 --> 00:04:48,000 | |
| You may need to keep annotations during the runtime to build some logic around this meta information. | |
| 66 | |
| 00:04:48,000 --> 00:04:50,000 | |
| You're in the program execution. | |
| 67 | |
| 00:04:50,000 --> 00:04:53,000 | |
| Your homework will be related to this case. | |
| 68 | |
| 00:04:53,000 --> 00:04:58,000 | |
| I believe that we have learned enough basics to start review and examples. | |
| 69 | |
| 00:04:58,000 --> 00:05:02,000 | |
| Anyway, I will explain examples as we go and the true. | |
| 70 | |
| 00:05:02,000 --> 00:05:08,000 | |
| Who believes that understanding of this topic will be easier with source code and the real good examples, | |
| 71 | |
| 00:05:08,000 --> 00:05:14,000 | |
| rather than with slides for the sake of the demo and this lesson, I created a separate package and | |
| 72 | |
| 00:05:14,000 --> 00:05:15,000 | |
| separate them a file. | |
| 73 | |
| 00:05:16,000 --> 00:05:19,000 | |
| You can find them a file in annotations package. | |
| 74 | |
| 00:05:20,000 --> 00:05:21,000 | |
| Let's start from basics. | |
| 75 | |
| 00:05:22,000 --> 00:05:24,000 | |
| Let's discuss annotation format. | |
| 76 | |
| 00:05:24,000 --> 00:05:29,000 | |
| Each annotation is started with at sign, followed by some meaningful name. | |
| 77 | |
| 00:05:30,000 --> 00:05:36,000 | |
| Z Sign character indicates as a compiler that what follows is an annotation. | |
| 78 | |
| 00:05:36,000 --> 00:05:41,000 | |
| The annotation can include elements which can be named and zem values. | |
| 79 | |
| 00:05:41,000 --> 00:05:48,000 | |
| For those elements, elements may contain additional information like in this case, you can see that | |
| 80 | |
| 00:05:48,000 --> 00:05:50,000 | |
| are used to suppress warnings. | |
| 81 | |
| 00:05:50,000 --> 00:05:54,000 | |
| Annotation and element value has value types. | |
| 82 | |
| 00:05:54,000 --> 00:06:01,000 | |
| This is basically for compiler to remove warnings for parameterized, at least in case I would Corman's | |
| 83 | |
| 00:06:01,000 --> 00:06:02,000 | |
| this annotation. | |
| 84 | |
| 00:06:02,000 --> 00:06:08,000 | |
| There will be warnings you as a compilation that I am using parameter types without parameter Ryzens. | |
| 85 | |
| 00:06:09,000 --> 00:06:17,000 | |
| You see this OK and other possible syntax of the similar annotation in case there is only one element | |
| 86 | |
| 00:06:17,000 --> 00:06:19,000 | |
| is declared inside the annotation. | |
| 87 | |
| 00:06:20,000 --> 00:06:25,000 | |
| You can omit element key and just put value like in this example. | |
| 88 | |
| 00:06:25,000 --> 00:06:32,000 | |
| It is also possible to use multiple annotations at once and from Java version eight zero even supports | |
| 89 | |
| 00:06:32,000 --> 00:06:34,000 | |
| of repeatable annotations. | |
| 90 | |
| 00:06:34,000 --> 00:06:40,000 | |
| As you can see in this example, a little bit later in our lesson, one will comp the creation of our | |
| 91 | |
| 00:06:40,000 --> 00:06:41,000 | |
| custom annotations. | |
| 92 | |
| 00:06:41,000 --> 00:06:44,000 | |
| I will explain you how to create repeatable annotations. | |
| 93 | |
| 00:06:45,000 --> 00:06:47,000 | |
| Let's open the source code of any annotation. | |
| 94 | |
| 00:06:48,000 --> 00:06:51,000 | |
| For example, let's look at suppress warnings annotation. | |
| 95 | |
| 00:06:52,000 --> 00:06:55,000 | |
| As you can see, there is no end in logic and code here. | |
| 96 | |
| 00:06:56,000 --> 00:07:00,000 | |
| There is no any algorithm or data processing or anything else. | |
| 97 | |
| 00:07:01,000 --> 00:07:10,000 | |
| Some students ask me then how annotations work, how overwrite annotation works, and all this basically | |
| 98 | |
| 00:07:10,000 --> 00:07:15,000 | |
| annotations are nothing more than just an information and what you can do. | |
| 99 | |
| 00:07:15,000 --> 00:07:16,000 | |
| Learn this information. | |
| 100 | |
| 00:07:17,000 --> 00:07:21,000 | |
| This is up to you, and this logic is programmed in a separate place. | |
| 101 | |
| 00:07:21,000 --> 00:07:24,000 | |
| OK, that was annotations basics. | |
| 102 | |
| 00:07:24,000 --> 00:07:29,000 | |
| Now, you know, at least on the high level, what annotations are us? | |
| 103 | |
| 00:07:29,000 --> 00:07:33,000 | |
| Know known annotations deeper and to learn them better? | |
| 104 | |
| 00:07:34,000 --> 00:07:36,000 | |
| Let's create our own annotation. | |
| 105 | |
| 00:07:36,000 --> 00:07:44,000 | |
| If you are already familiar with G-Unit will implement our own kind of test annotation if you are not | |
| 106 | |
| 00:07:44,000 --> 00:07:45,000 | |
| familiar with your units yet. | |
| 107 | |
| 00:07:45,000 --> 00:07:46,000 | |
| Just a few words. | |
| 108 | |
| 00:07:47,000 --> 00:07:49,000 | |
| G-Unit is a framework for unit testing. | |
| 109 | |
| 00:07:50,000 --> 00:07:56,000 | |
| It provides a lot of different features and the Mournes impossibility to run specific methods separately | |
| 110 | |
| 00:07:57,000 --> 00:07:59,000 | |
| to execute separate test cases. | |
| 111 | |
| 00:07:59,000 --> 00:08:06,000 | |
| The purpose of that massive is to reproduce the state of the system as a specific moment of time, and | |
| 112 | |
| 00:08:06,000 --> 00:08:08,000 | |
| the Cert is expected to be here. | |
| 113 | |
| 00:08:09,000 --> 00:08:15,000 | |
| All examples will be stored under this package, so you will easily found them in attachments to this | |
| 114 | |
| 00:08:15,000 --> 00:08:17,000 | |
| lesson in case you want to run examples on your computer. | |
| 115 | |
| 00:08:18,000 --> 00:08:19,000 | |
| Let's start. | |
| 116 | |
| 00:08:19,000 --> 00:08:21,000 | |
| I create test annotations. | |
| 117 | |
| 00:08:21,000 --> 00:08:28,000 | |
| First, I declare annotation in a separate file, and you can see in this example that the use interface | |
| 118 | |
| 00:08:28,000 --> 00:08:30,000 | |
| here was at sign. | |
| 119 | |
| 00:08:31,000 --> 00:08:38,000 | |
| The second important step is to add matter annotations to specify the scope and the target of our custom | |
| 120 | |
| 00:08:38,000 --> 00:08:38,000 | |
| annotation. | |
| 121 | |
| 00:08:39,000 --> 00:08:43,000 | |
| I'm talking about annotations, zero retention and target. | |
| 122 | |
| 00:08:44,000 --> 00:08:44,000 | |
| Let's run. | |
| 123 | |
| 00:08:44,000 --> 00:08:45,000 | |
| What are they? | |
| 124 | |
| 00:08:46,000 --> 00:08:48,000 | |
| So what do we need to target annotation for? | |
| 125 | |
| 00:08:49,000 --> 00:08:54,000 | |
| This annotation indicates a context in which an annotation type is applicable. | |
| 126 | |
| 00:08:55,000 --> 00:09:02,000 | |
| In simple words, where you can use the sanitation target, annotation can take array of any values | |
| 127 | |
| 00:09:02,000 --> 00:09:04,000 | |
| of element type enum. | |
| 128 | |
| 00:09:05,000 --> 00:09:08,000 | |
| So even in case you forgot where you can use annotations. | |
| 129 | |
| 00:09:09,000 --> 00:09:16,000 | |
| Just open element type in them and you would find enum for each possible placement of your annotation. | |
| 130 | |
| 00:09:16,000 --> 00:09:24,000 | |
| Even despite the fact is, a on annotation may take array of elements in our specific example, we would | |
| 131 | |
| 00:09:24,000 --> 00:09:33,000 | |
| use only one in a message because in our specific business context, we don't want to allow our client | |
| 132 | |
| 00:09:33,000 --> 00:09:37,000 | |
| use it in other places is an exhortation is retention. | |
| 133 | |
| 00:09:38,000 --> 00:09:43,000 | |
| This information indicates how long annotations was annotated. | |
| 134 | |
| 00:09:43,000 --> 00:09:45,000 | |
| Time are to be retained. | |
| 135 | |
| 00:09:45,000 --> 00:09:49,000 | |
| That is exactly what we have discussed at the beginning of our lesson. | |
| 136 | |
| 00:09:49,000 --> 00:09:56,000 | |
| When I explained that annotation may be used during Zabeel time by the compiler and discarded from the | |
| 137 | |
| 00:09:56,000 --> 00:10:02,000 | |
| class on the glass level but discarded during the anthem, one class is uploaded in. | |
| 138 | |
| 00:10:03,000 --> 00:10:11,000 | |
| And during runtime, this annotation can take any value of retention policy in them, even in case you | |
| 139 | |
| 00:10:11,000 --> 00:10:17,000 | |
| forgot what's retention levels for annotations are, you always can open the source code of this in | |
| 140 | |
| 00:10:17,000 --> 00:10:19,000 | |
| them and explore this. | |
| 141 | |
| 00:10:19,000 --> 00:10:22,000 | |
| As I said, there's three possible options here. | |
| 142 | |
| 00:10:22,000 --> 00:10:31,000 | |
| They are source Closs, and one time in our case, we use runtime retention policy because we need this | |
| 143 | |
| 00:10:31,000 --> 00:10:33,000 | |
| annotation to be retained. | |
| 144 | |
| 00:10:33,000 --> 00:10:34,000 | |
| That's a runtime. | |
| 145 | |
| 00:10:34,000 --> 00:10:41,000 | |
| Now, at this time, to add custom elements, imagine that you want to specify expected exception in | |
| 146 | |
| 00:10:41,000 --> 00:10:47,000 | |
| order we can test negative scenarios, for example, in case we expect exception to be thrown. | |
| 147 | |
| 00:10:47,000 --> 00:10:49,000 | |
| But there was no any exception. | |
| 148 | |
| 00:10:49,000 --> 00:10:58,000 | |
| Drone zones This particular test should be considered as field and the stanzas declare an element in | |
| 149 | |
| 00:10:58,000 --> 00:10:58,000 | |
| annotation. | |
| 150 | |
| 00:10:58,000 --> 00:11:02,000 | |
| We have to declare mass was the name of the element itself. | |
| 151 | |
| 00:11:03,000 --> 00:11:06,000 | |
| Return type will be the type of the element. | |
| 152 | |
| 00:11:06,000 --> 00:11:12,000 | |
| For example, in this specific case, we would like to specify loss of the expected exception. | |
| 153 | |
| 00:11:12,000 --> 00:11:18,000 | |
| Thus, returns type for this message will be close when we declare this matter. | |
| 154 | |
| 00:11:18,000 --> 00:11:24,000 | |
| We should remember important things, since this massive can throw an exception. | |
| 155 | |
| 00:11:24,000 --> 00:11:27,000 | |
| There is a restriction on the return types. | |
| 156 | |
| 00:11:28,000 --> 00:11:35,000 | |
| Basically, you can return on your primitives string class in them, annotations and arrays of these | |
| 157 | |
| 00:11:35,000 --> 00:11:36,000 | |
| types. | |
| 158 | |
| 00:11:36,000 --> 00:11:39,000 | |
| Also, this must has default value. | |
| 159 | |
| 00:11:40,000 --> 00:11:46,000 | |
| For example, in this particular case, default exception, to be certain is of non plus. | |
| 160 | |
| 00:11:46,000 --> 00:11:51,000 | |
| This is our custom clause that extends Roble and that basically is empty. | |
| 161 | |
| 00:11:52,000 --> 00:11:56,000 | |
| This is needed because I can't have default no values. | |
| 162 | |
| 00:11:56,000 --> 00:12:03,000 | |
| But in case I wouldn't specify, a default value client will be forced to parse the value for this element. | |
| 163 | |
| 00:12:03,000 --> 00:12:07,000 | |
| But what clients should Boston in case there is no expected exception? | |
| 164 | |
| 00:12:07,000 --> 00:12:10,000 | |
| That's why I have default non clause here. | |
| 165 | |
| 00:12:11,000 --> 00:12:14,000 | |
| Similar example of default value in our other element. | |
| 166 | |
| 00:12:15,000 --> 00:12:19,000 | |
| Each test can be named and default name is empty string. | |
| 167 | |
| 00:12:19,000 --> 00:12:23,000 | |
| But the client of this code can pass any custom name. | |
| 168 | |
| 00:12:23,000 --> 00:12:26,000 | |
| One of the restriction was regards the default value. | |
| 169 | |
| 00:12:26,000 --> 00:12:27,000 | |
| It can't be null. | |
| 170 | |
| 00:12:28,000 --> 00:12:29,000 | |
| Is that clear? | |
| 171 | |
| 00:12:29,000 --> 00:12:32,000 | |
| We are done with annotation creation. | |
| 172 | |
| 00:12:32,000 --> 00:12:34,000 | |
| Let's now understand how to use it. | |
| 173 | |
| 00:12:35,000 --> 00:12:39,000 | |
| As you can notice, there is no logic defined in the annotation. | |
| 174 | |
| 00:12:39,000 --> 00:12:46,000 | |
| That means that I should have some place where logic for annotation process is described in this particular | |
| 175 | |
| 00:12:46,000 --> 00:12:47,000 | |
| example. | |
| 176 | |
| 00:12:47,000 --> 00:12:53,000 | |
| It can be some tests around the class similar to the G unit, where we have separate runners that can | |
| 177 | |
| 00:12:53,000 --> 00:12:55,000 | |
| execute my tests. | |
| 178 | |
| 00:12:56,000 --> 00:12:58,000 | |
| I open tests around the class. | |
| 179 | |
| 00:12:58,000 --> 00:13:01,000 | |
| It has run tests massive that takes class. | |
| 180 | |
| 00:13:01,000 --> 00:13:05,000 | |
| It contains tests to run as mass argument. | |
| 181 | |
| 00:13:05,000 --> 00:13:11,000 | |
| I use this reference to a class object to get the array of all masses. | |
| 182 | |
| 00:13:11,000 --> 00:13:18,000 | |
| After that, I feel the masses to keep in-stream only masses that have test annotation. | |
| 183 | |
| 00:13:18,000 --> 00:13:24,000 | |
| After that, I filter all static masses to keep only non static masses in the stream. | |
| 184 | |
| 00:13:24,000 --> 00:13:28,000 | |
| And now I need to call test my asset on the object. | |
| 185 | |
| 00:13:28,000 --> 00:13:31,000 | |
| I create new instance using test class. | |
| 186 | |
| 00:13:32,000 --> 00:13:39,000 | |
| After that, I need to speak logic for annotations that have expected exception and those who don't. | |
| 187 | |
| 00:13:39,000 --> 00:13:42,000 | |
| You remember that annotations results? | |
| 188 | |
| 00:13:42,000 --> 00:13:47,000 | |
| Bits of fired by client exception still has exception was not by default. | |
| 189 | |
| 00:13:48,000 --> 00:13:55,000 | |
| I use this information during implementation of my logic because in case I expect any exceptions specified | |
| 190 | |
| 00:13:55,000 --> 00:14:02,000 | |
| by client other than default, I need to check that the expected exception has been thrown come back | |
| 191 | |
| 00:14:02,000 --> 00:14:04,000 | |
| losses of exceptions thrown. | |
| 192 | |
| 00:14:04,000 --> 00:14:06,000 | |
| Here is the logic for that. | |
| 193 | |
| 00:14:07,000 --> 00:14:15,000 | |
| By the way, in a reflection API in case exception has been thrown on the invoked received in the invocation | |
| 194 | |
| 00:14:15,000 --> 00:14:20,000 | |
| target exception that serves as a wrapper for a regional exception. | |
| 195 | |
| 00:14:21,000 --> 00:14:29,000 | |
| That's why I need to get course massive here to get the reference to the exception that caused invocation | |
| 196 | |
| 00:14:29,000 --> 00:14:34,000 | |
| target exception in case I don't expect exception to this rule. | |
| 197 | |
| 00:14:34,000 --> 00:14:41,000 | |
| Massad just should be executed successfully, and I just invoke mass differently. | |
| 198 | |
| 00:14:41,000 --> 00:14:47,000 | |
| This is not the full replica of test annotation from G-Unit, but we have a goal in this lesson not | |
| 199 | |
| 00:14:47,000 --> 00:14:53,000 | |
| to run G-Unit, but to understand how to work with annotations and process zap. | |
| 200 | |
| 00:14:54,000 --> 00:14:57,000 | |
| Now let me show you class with tests. | |
| 201 | |
| 00:14:57,000 --> 00:15:00,000 | |
| I open the glass, such as code test samples. | |
| 202 | |
| 00:15:01,000 --> 00:15:02,000 | |
| This class contains. | |
| 203 | |
| 00:15:02,000 --> 00:15:05,000 | |
| Is different mascots that are marked with test annotation. | |
| 204 | |
| 00:15:06,000 --> 00:15:09,000 | |
| Each test has name for the sake of the current demo. | |
| 205 | |
| 00:15:09,000 --> 00:15:17,000 | |
| I have two test cases here mascots that is executed without exception and massive that throws exception | |
| 206 | |
| 00:15:17,000 --> 00:15:18,000 | |
| of expected type. | |
| 207 | |
| 00:15:19,000 --> 00:15:20,000 | |
| Nothing complex here. | |
| 208 | |
| 00:15:21,000 --> 00:15:27,000 | |
| And now let's write a code that will use my test runner to run these test cases. | |
| 209 | |
| 00:15:28,000 --> 00:15:32,000 | |
| I open another clause at the so-called test annotation demo. | |
| 210 | |
| 00:15:33,000 --> 00:15:34,000 | |
| I read instance of test runner. | |
| 211 | |
| 00:15:35,000 --> 00:15:44,000 | |
| I could run test method and the person's glass that contains my test cases that so let's run this program | |
| 212 | |
| 00:15:44,000 --> 00:15:45,000 | |
| and console. | |
| 213 | |
| 00:15:45,000 --> 00:15:53,000 | |
| You can see that test without exception has been passed because we received exception that we expect | |
| 214 | |
| 00:15:53,000 --> 00:16:01,000 | |
| and test without exception also has been passed because it was executed without any exception. | |
| 215 | |
| 00:16:02,000 --> 00:16:06,000 | |
| I recommend you to look through the source code that I left in attachments to the lesson. | |
| 216 | |
| 00:16:06,000 --> 00:16:11,000 | |
| Run it on your local computer to understand better how it works. | |
| 217 | |
| 00:16:12,000 --> 00:16:16,000 | |
| And the last thing for the desert I'd like to share with you is repeatable annotations. | |
| 218 | |
| 00:16:17,000 --> 00:16:23,000 | |
| To be honest, in my opinion, this is a very rare case because in case you need to pass multiple values, | |
| 219 | |
| 00:16:24,000 --> 00:16:30,000 | |
| you always can define additional elements in the original annotation or declare array of values for | |
| 220 | |
| 00:16:30,000 --> 00:16:31,000 | |
| some element. | |
| 221 | |
| 00:16:32,000 --> 00:16:39,000 | |
| Anyway, it was hard for me to come up with real life example in this case, but I just want to demonstrate | |
| 222 | |
| 00:16:39,000 --> 00:16:42,000 | |
| use a feature that was added in Java version eight. | |
| 223 | |
| 00:16:42,000 --> 00:16:44,000 | |
| Let me open our demo example. | |
| 224 | |
| 00:16:45,000 --> 00:16:48,000 | |
| Can they see that I have Orser annotation here duplicated? | |
| 225 | |
| 00:16:49,000 --> 00:16:56,000 | |
| Normally it is not accepted, and to be able to use the same annotation twice for the same element, | |
| 226 | |
| 00:16:56,000 --> 00:16:59,000 | |
| you need to perform additional actions. | |
| 227 | |
| 00:17:00,000 --> 00:17:07,000 | |
| The first thing to do is to add annotation, repeatable annotation definition, like I did for Orser | |
| 228 | |
| 00:17:07,000 --> 00:17:08,000 | |
| annotation. | |
| 229 | |
| 00:17:08,000 --> 00:17:15,000 | |
| The second thing to do is to create container for repeatable annotations for compatibility reasons. | |
| 230 | |
| 00:17:15,000 --> 00:17:19,000 | |
| Repeating annotations are stored in a container annotation. | |
| 231 | |
| 00:17:20,000 --> 00:17:25,000 | |
| In order for the compiler to do this, two declarations are required in your code. | |
| 232 | |
| 00:17:25,000 --> 00:17:30,000 | |
| That's why another annotation that we need to create is here. | |
| 233 | |
| 00:17:30,000 --> 00:17:39,000 | |
| I call it Auster's container annotation must have element value that returns array with objects of repeatable | |
| 234 | |
| 00:17:39,000 --> 00:17:42,000 | |
| annotation type that we want to repeat. | |
| 235 | |
| 00:17:42,000 --> 00:17:47,000 | |
| In this case, value element will contain array of Orser annotations. | |
| 236 | |
| 00:17:47,000 --> 00:17:48,000 | |
| Is that clear? | |
| 237 | |
| 00:17:49,000 --> 00:17:52,000 | |
| Basically, that's all what I wanted to share with you. | |
| 238 | |
| 00:17:53,000 --> 00:17:55,000 | |
| Let's review what we have learned in this lesson. | |
| 239 | |
| 00:17:56,000 --> 00:18:03,000 | |
| In this lesson, we have learned what annotation is also explained to you, why we might need an addition | |
| 240 | |
| 00:18:03,000 --> 00:18:05,000 | |
| and when we can use it. | |
| 241 | |
| 00:18:05,000 --> 00:18:08,000 | |
| Now, you know where annotations may be applied. | |
| 242 | |
| 00:18:09,000 --> 00:18:13,000 | |
| You know why we need targeted annotation and you know what element type in them is. | |
| 243 | |
| 00:18:14,000 --> 00:18:19,000 | |
| Also, you learned what retention annotation is and what retention policy in them is. | |
| 244 | |
| 00:18:20,000 --> 00:18:21,000 | |
| In the lesson. | |
| 245 | |
| 00:18:21,000 --> 00:18:27,000 | |
| We created our custom annotation, and at the end of the lesson, I explained to you how to create repeatable | |
| 246 | |
| 00:18:27,000 --> 00:18:28,000 | |
| annotations. | |
| 247 | |
| 00:18:29,000 --> 00:18:32,000 | |
| Basically, that's a summary of all what we have learned today. | |
| 248 | |
| 00:18:32,000 --> 00:18:37,000 | |
| I have a homework for you in order you can practice in creation of annotations. | |
| 249 | |
| 00:18:37,000 --> 00:18:41,000 | |
| You also can find a link to the whole in attachment to the lesson. | |
| 250 | |
| 00:18:41,000 --> 00:18:44,000 | |
| Let's understand what you need to do in this task. | |
| 251 | |
| 00:18:45,000 --> 00:18:49,000 | |
| You need to create to do annotation that will allow us to track the progress of note. | |
| 252 | |
| 00:18:49,000 --> 00:18:50,000 | |
| Implement that message. | |
| 253 | |
| 00:18:51,000 --> 00:18:57,000 | |
| To do annotation has different elements such as author, priority and stages. | |
| 254 | |
| 00:18:57,000 --> 00:19:05,000 | |
| Some of them have default values and also Element doesn't have annotation can be applied only to masses | |
| 255 | |
| 00:19:05,000 --> 00:19:07,000 | |
| and should be available under on that. | |
| 256 | |
| 00:19:07,000 --> 00:19:14,000 | |
| We'll see to create separate classes at the school to do analyzer in that class, we should have massive | |
| 257 | |
| 00:19:14,000 --> 00:19:22,000 | |
| three chance string value that is generated to do report pay attention that in order your homework would | |
| 258 | |
| 00:19:22,000 --> 00:19:23,000 | |
| be considered to be done. | |
| 259 | |
| 00:19:24,000 --> 00:19:28,000 | |
| You need to follow specific partners for each method analysis. | |
| 260 | |
| 00:19:28,000 --> 00:19:30,000 | |
| One is described here. | |
| 261 | |
| 00:19:30,000 --> 00:19:35,000 | |
| You should specify method name or search priority on stages. | |
| 262 | |
| 00:19:35,000 --> 00:19:42,000 | |
| Is it clear any way you will be able to find my solution also in attachments does assessment, but try | |
| 263 | |
| 00:19:42,000 --> 00:19:49,000 | |
| to solve this task without any help and by yourself first and only in case solution is not on this for | |
| 264 | |
| 00:19:49,000 --> 00:19:49,000 | |
| you. | |
| 265 | |
| 00:19:49,000 --> 00:19:56,000 | |
| Use my solution as a reference and as always, in case you have any questions, feel free to add your | |
| 266 | |
| 00:19:56,000 --> 00:19:58,000 | |
| questions in comments on this video. | |
| 267 | |
| 00:19:59,000 --> 00:20:01,000 | |
| Thanks a lot you for your attention. | |
| 268 | |
| 00:20:01,000 --> 00:20:04,000 | |
| Have a great day and see in the next lesson. | |