1 00:00:05,000 --> 00:00:06,000 Hello, Jim. 2 00:00:06,000 --> 00:00:12,000 In this lesson, we're going to learn a really interesting topic that is Skulled Jallow Reflexion API. 3 00:00:12,000 --> 00:00:18,000 We have a lot of things to learn today, but as usual, we're going to start from Seery and Grado. 4 00:00:18,000 --> 00:00:20,000 It will get to the code examples. 5 00:00:20,000 --> 00:00:23,000 So it's the beginning of the lesson we're going to learn. 6 00:00:23,000 --> 00:00:31,000 What a reflection API is and what rules does adapt will review Java like reflect package in order, 7 00:00:31,000 --> 00:00:34,000 you know, where you can look for the official documentation. 8 00:00:35,000 --> 00:00:37,000 And after that, we will start our protocol. 9 00:00:37,000 --> 00:00:43,000 Part of the lesson I'm going to show you how you can grow up with different class entities such as fields, 10 00:00:43,000 --> 00:00:45,000 constructors, mass interfaces. 11 00:00:45,000 --> 00:00:48,000 Superclusters was a help of reflection API. 12 00:00:49,000 --> 00:00:55,000 I will put special focus on a separate group of examples that relates to the work with private entities 13 00:00:55,000 --> 00:00:56,000 inside the class. 14 00:00:57,000 --> 00:01:00,000 As I already said, there will be a lot of interesting things. 15 00:01:01,000 --> 00:01:07,000 Believe me, this will be mind blowing when you understand what you can do with the help of Reflection 16 00:01:07,000 --> 00:01:07,000 API. 17 00:01:08,000 --> 00:01:09,000 So let's start our lesson. 18 00:01:10,000 --> 00:01:16,000 And to start with, let's understand first what's reflexion is one of reflection is used and why do 19 00:01:16,000 --> 00:01:17,000 we need it? 20 00:01:18,000 --> 00:01:25,000 Reflection is a commonly used by programs which requires and devoted to X in line or modifies the runtime 21 00:01:25,000 --> 00:01:28,000 behavior of applications running into Java virtual machine. 22 00:01:29,000 --> 00:01:36,000 In other words, Reflection API allows us to inspect or modify attributes of classis interfaces, fields 23 00:01:36,000 --> 00:01:38,000 and masses, duendes of program execution. 24 00:01:38,000 --> 00:01:42,000 That's a runtime that is basically after the compilation process. 25 00:01:42,000 --> 00:01:43,000 How would you like it? 26 00:01:43,000 --> 00:01:44,000 Tolerate it? 27 00:01:44,000 --> 00:01:52,000 Additionally, we can instantiate new objects, invoke methods and get a set feel to values using reflection. 28 00:01:52,000 --> 00:01:56,000 Even if Zapp Private Fields and Zendō Gatsas or satyrs. 29 00:01:57,000 --> 00:02:04,000 Probably you will not implement codes are related to reflection on daily basis, but 100 percent you 30 00:02:04,000 --> 00:02:09,000 will deal with code that uses reflection inside such libraries as Jeunet. 31 00:02:09,000 --> 00:02:15,000 Marqueta is Imark Power, Mock Sprink framework and many others. 32 00:02:15,000 --> 00:02:18,000 All of them use elements of reflection API. 33 00:02:19,000 --> 00:02:25,000 But as a consumer of the search party library, you just sanjoy and its features without implementing 34 00:02:25,000 --> 00:02:26,000 your own version of G unit. 35 00:02:27,000 --> 00:02:27,000 Correct. 36 00:02:28,000 --> 00:02:32,000 That's why you need to know what's the function is and how to work with it. 37 00:02:32,000 --> 00:02:39,000 This is relatively advanced feature and should be used only by developers who have a strong grasp of 38 00:02:39,000 --> 00:02:43,000 fundamentals of the language with that caveat in mind. 39 00:02:43,000 --> 00:02:50,000 Reflection is a powerful technique and can enable applications to perform operations which would otherwise 40 00:02:50,000 --> 00:02:51,000 be impossible. 41 00:02:52,000 --> 00:02:55,000 And what are the cases when we need the reflection API? 42 00:02:56,000 --> 00:03:02,000 Yeah, various cases when we need to use this API to achieve certain result that we provided was just 43 00:03:02,000 --> 00:03:03,000 a few examples. 44 00:03:04,000 --> 00:03:09,000 The first and probably the most simple case that I assume all of you have worked with, if you are following, 45 00:03:09,000 --> 00:03:11,000 is, of course, is the bargain. 46 00:03:11,000 --> 00:03:18,000 And thus does the bagasse need to be able to ximen private members on glosses. 47 00:03:18,000 --> 00:03:25,000 Desautels also needs to be able to get access, sometimes private masses like you saw in the case with 48 00:03:25,000 --> 00:03:25,000 Spohrer. 49 00:03:26,000 --> 00:03:33,000 Also, when it controls a sequence of mascot's execution to make sure that Nasus Annotated was before 50 00:03:33,000 --> 00:03:39,000 each annotation will be executed, before each test case, for example, or in case we need to initialize 51 00:03:39,000 --> 00:03:45,000 fields of an object, was Moncks and we need to do this on the for objects that that map was inject 52 00:03:45,000 --> 00:03:46,000 more annotations. 53 00:03:47,000 --> 00:03:51,000 A lot of things needed to be controlled by test tools and reflection. 54 00:03:51,000 --> 00:03:52,000 API helps on this. 55 00:03:53,000 --> 00:03:57,000 The next example of using reflection API is extensibility features. 56 00:03:58,000 --> 00:04:05,000 And the application may make use of external user defined classes by creating instances of extensibility 57 00:04:05,000 --> 00:04:08,000 objects using zarf fully qualified names. 58 00:04:09,000 --> 00:04:14,000 This is also relatively specific case and used Durrance advanced programming. 59 00:04:14,000 --> 00:04:19,000 But my goal is to make a pro coder from user and discourse, and I'm not joking. 60 00:04:20,000 --> 00:04:25,000 So we are also going to learn how to do this visual development environments. 61 00:04:25,000 --> 00:04:31,000 Imagine, though, that allows it to generate programming code or tool is used to perform any other 62 00:04:31,000 --> 00:04:32,000 visual development. 63 00:04:33,000 --> 00:04:38,000 And there is some digital information that this needed to be processed according to the specific rules. 64 00:04:38,000 --> 00:04:44,000 And now imagine that you can work in a visual development environment with the selections that you do 65 00:04:44,000 --> 00:04:45,000 inside. 66 00:04:46,000 --> 00:04:51,000 The whole development process might benefit from making use of that information available. 67 00:04:52,000 --> 00:04:57,000 This will help to make proper selections regarding behavior of some components and interactions between 68 00:04:57,000 --> 00:04:59,000 Zao HOVs it. 69 00:04:59,000 --> 00:05:02,000 Now you at least understands what swift action is for. 70 00:05:03,000 --> 00:05:03,000 Let's start. 71 00:05:03,000 --> 00:05:10,000 None of the details, all classes that are related to reflexion mechanism are already present in Jaedicke 72 00:05:10,000 --> 00:05:12,000 in Java, LANC reflect package. 73 00:05:12,000 --> 00:05:18,000 I encourage you to look through the official documentation after the lesson to make sure you can navigate 74 00:05:18,000 --> 00:05:20,000 between different types and just package easily. 75 00:05:21,000 --> 00:05:25,000 There are numerous of interfaces and glosses today during the lesson. 76 00:05:25,000 --> 00:05:27,000 We're going to review majority of them. 77 00:05:28,000 --> 00:05:33,000 And as you already understand, you would need to inkers classes from this package and your Java file. 78 00:05:34,000 --> 00:05:38,000 OK, so let me start screen sharing and proceed with code examples. 79 00:05:38,000 --> 00:05:44,000 Remember that all code examples from the lesson you can always find in attachments to this lesson? 80 00:05:44,000 --> 00:05:48,000 I opened them a class from a reflection package of my learning project. 81 00:05:48,000 --> 00:05:54,000 I will run a program to walk you through the console output and each line of code in this example. 82 00:05:55,000 --> 00:06:01,000 And the first thing to start here is to understand that after completion, class definitions uploaded 83 00:06:01,000 --> 00:06:02,000 into the GBM. 84 00:06:03,000 --> 00:06:07,000 And there is an object of type gloss for each type. 85 00:06:07,000 --> 00:06:12,000 Zet object contains type definition and API to interact with it. 86 00:06:13,000 --> 00:06:20,000 So we can say that the instances of the class class represent classes and interfaces in the running 87 00:06:20,000 --> 00:06:21,000 Java application. 88 00:06:22,000 --> 00:06:28,000 Basically, it will be fair to mention that the objects of class type may represent all the reference 89 00:06:28,000 --> 00:06:29,000 types. 90 00:06:29,000 --> 00:06:35,000 XOs includes, but not limited to arrays in annotations, cetera. 91 00:06:35,000 --> 00:06:41,000 That's why the first things that we need to do is to get the reference to the class object of the specific 92 00:06:41,000 --> 00:06:41,000 type. 93 00:06:41,000 --> 00:06:47,000 If you remember lesson about object class, then you should remember that one of the masses is that 94 00:06:47,000 --> 00:06:50,000 each object has is Geth class method. 95 00:06:51,000 --> 00:06:58,000 So I create an instance of the user class that is our nested closet I created here for the sake of example. 96 00:06:58,000 --> 00:07:02,000 And I call get class method an instance of the user object. 97 00:07:03,000 --> 00:07:09,000 Now, when I have reference to the class object of user time, we can play with the reflection API. 98 00:07:09,000 --> 00:07:12,000 Let me come up with some tasks us to solve. 99 00:07:12,000 --> 00:07:15,000 And we will learn different classes as we go. 100 00:07:15,000 --> 00:07:18,000 For example, let's get the foo class name. 101 00:07:19,000 --> 00:07:20,000 The API is pretty intuitive. 102 00:07:20,000 --> 00:07:23,000 So you just need to go get name method. 103 00:07:23,000 --> 00:07:27,000 As you can see, full class name is printed to consult. 104 00:07:28,000 --> 00:07:31,000 Take into account that the user is in master class. 105 00:07:31,000 --> 00:07:34,000 It has the lower sign after the name of the rupt class. 106 00:07:35,000 --> 00:07:40,000 This is a common convention in Java for the naming of compiler nested classes. 107 00:07:40,000 --> 00:07:42,000 Well, what was this first simple task? 108 00:07:43,000 --> 00:07:44,000 Let's jump to the next one. 109 00:07:45,000 --> 00:07:48,000 Let's find out names of all fields in user class. 110 00:07:49,000 --> 00:07:55,000 Pay attention that I have three non static fields and one static and user class, and they have private 111 00:07:55,000 --> 00:08:01,000 access modifier, no getters setters to declare to interact with these fields. 112 00:08:01,000 --> 00:08:08,000 Using the reference to the class object, we can get array of all fields, fields as a type that contains 113 00:08:08,000 --> 00:08:11,000 information about the field of a single class or interface. 114 00:08:12,000 --> 00:08:15,000 It also provides it was dynamic access to it. 115 00:08:15,000 --> 00:08:23,000 I invoked had declared fields to get the array of fields in which this mass returns all fields from 116 00:08:23,000 --> 00:08:23,000 the class. 117 00:08:24,000 --> 00:08:32,000 This includes public protected default or so-called package access and private fields, but excludes 118 00:08:32,000 --> 00:08:33,000 inherited fields. 119 00:08:33,000 --> 00:08:38,000 The results and other methods of the scope get fields and tensions and get fields. 120 00:08:38,000 --> 00:08:43,000 Massart returns on the public fields, and the one where broken was reflection. 121 00:08:43,000 --> 00:08:46,000 Often we need to get access to private fields, too. 122 00:08:47,000 --> 00:08:54,000 That's why in this particular case, I used another method get declared fields that chance all fields, 123 00:08:54,000 --> 00:08:56,000 including private ones. 124 00:08:57,000 --> 00:09:03,000 And after that, I create a stream out of this array and apply consumer function to each of the field. 125 00:09:03,000 --> 00:09:09,000 If you are not familiar with lambda expressions, functional interface and namely consumer type. 126 00:09:09,000 --> 00:09:13,000 Feel free to take my post functional programming for Jamma Ingenius. 127 00:09:13,000 --> 00:09:16,000 I explained these topics and details in that course. 128 00:09:17,000 --> 00:09:20,000 So as you can see, I it to console names of each field. 129 00:09:21,000 --> 00:09:24,000 And this is only one thing that we can do this field. 130 00:09:24,000 --> 00:09:26,000 We can do much more than this. 131 00:09:27,000 --> 00:09:29,000 Let me also show you other things. 132 00:09:29,000 --> 00:09:32,000 For example, you can explore that type of a field. 133 00:09:33,000 --> 00:09:35,000 Just code must be a generic type. 134 00:09:36,000 --> 00:09:42,000 As you can see, when I printed the return type object to console to string masses has been invoked 135 00:09:42,000 --> 00:09:44,000 and we see full gloss name. 136 00:09:44,000 --> 00:09:46,000 Also, you can check fields modifiers. 137 00:09:47,000 --> 00:09:49,000 Just go get modifiers. 138 00:09:49,000 --> 00:09:51,000 Massive, this method to chance. 139 00:09:51,000 --> 00:09:59,000 And that basically will tell you nothing if you just watch at number to the this end and understand 140 00:09:59,000 --> 00:10:03,000 its meaning when it to use another class from Java language. 141 00:10:03,000 --> 00:10:11,000 Package modifier, this clause has different measures that takes in as much argument and returned, 142 00:10:11,000 --> 00:10:12,000 true or false. 143 00:10:12,000 --> 00:10:20,000 We can check these modify Privert, Estatic, this public is protected, is final and many other things. 144 00:10:20,000 --> 00:10:27,000 And an example you can see that I call is private Massart and deposit into value rections from get modified 145 00:10:27,000 --> 00:10:28,000 SMAS. 146 00:10:29,000 --> 00:10:34,000 Considering that all fields have private modifying my example, I receive two for each field. 147 00:10:35,000 --> 00:10:41,000 Does it make sense, by the way, is a similar way you can check modifiers of classes and methods? 148 00:10:41,000 --> 00:10:48,000 I will not stop on each particular case, but just remember that it is also possible to check modifiers 149 00:10:48,000 --> 00:10:52,000 of all the class elements following this approach, using the class. 150 00:10:52,000 --> 00:10:56,000 I can get the package name, just schools, the package name, and that's it. 151 00:10:57,000 --> 00:10:59,000 Also, there is a specific type package. 152 00:11:00,000 --> 00:11:03,000 You can get the instance of this class by calling massive. 153 00:11:03,000 --> 00:11:07,000 Get the package if you need to do some operations was package object. 154 00:11:07,000 --> 00:11:12,000 If you want to investigate type Iraqui, you can always get the reference to the class. 155 00:11:12,000 --> 00:11:16,000 Object of superclass by column gets super class mass. 156 00:11:16,000 --> 00:11:20,000 The superclass for all reference types in Java is object. 157 00:11:21,000 --> 00:11:25,000 So I get the reference to the instance of object class. 158 00:11:25,000 --> 00:11:31,000 The next things that I'd like to show here is how you can check the interfaces that are implemented 159 00:11:31,000 --> 00:11:31,000 in class. 160 00:11:32,000 --> 00:11:35,000 I print name of each interface to console. 161 00:11:35,000 --> 00:11:37,000 And here you can see poufs. 162 00:11:37,000 --> 00:11:44,000 I have implemented serializable anticolonial interface in user Granit tensions in Zakouma Sync about 163 00:11:44,000 --> 00:11:45,000 all of this. 164 00:11:45,000 --> 00:11:49,000 You can explore a code of your program, you as a program execution. 165 00:11:50,000 --> 00:11:56,000 So you don't need a developer to investigate code of each program to create some useful utility classes, 166 00:11:57,000 --> 00:11:59,000 because code of each program is different. 167 00:12:00,000 --> 00:12:06,000 Instead, you can create a code that investigates the code zero, the execution. 168 00:12:06,000 --> 00:12:09,000 And on top of that, you can build the logic you wish. 169 00:12:10,000 --> 00:12:10,000 Let's move on. 170 00:12:11,000 --> 00:12:15,000 There's also another way to get the reference to the instance of a class. 171 00:12:15,000 --> 00:12:21,000 We can learn Java loss into Jamam by its name and get the reference to the class object. 172 00:12:21,000 --> 00:12:26,000 This is an important example, and we will do something like this later on in our course. 173 00:12:27,000 --> 00:12:32,000 Just use for names static mass and pass the full name of the class I pass. 174 00:12:32,000 --> 00:12:34,000 He has a full name of the method. 175 00:12:34,000 --> 00:12:38,000 Class will use this way of class instantiation. 176 00:12:38,000 --> 00:12:41,000 One, we actually don't need the object of this type. 177 00:12:41,000 --> 00:12:45,000 All we can is created and called get class method. 178 00:12:45,000 --> 00:12:48,000 That's why we can load the class by its name. 179 00:12:49,000 --> 00:12:51,000 Pay attention to this method. 180 00:12:51,000 --> 00:12:54,000 Invocation maestro class not found exception. 181 00:12:54,000 --> 00:12:56,000 This may happen in case you pass. 182 00:12:56,000 --> 00:12:59,000 Last names are just absent in the class boss. 183 00:13:00,000 --> 00:13:02,000 Also, we can get constructors. 184 00:13:02,000 --> 00:13:06,000 Constructor is a separate type from General Lenca effect package. 185 00:13:06,000 --> 00:13:09,000 Heavens, reference is a constructor object. 186 00:13:09,000 --> 00:13:11,000 We can do really a lot of sync's, was it? 187 00:13:12,000 --> 00:13:17,000 But for the sake of this example, only will prints number of constructors and their names. 188 00:13:18,000 --> 00:13:21,000 In this example, I will get declared constructor. 189 00:13:21,000 --> 00:13:30,000 SMAS is the name important is the same as in the masses, yet declared constructor means return of all 190 00:13:30,000 --> 00:13:31,000 constructors. 191 00:13:31,000 --> 00:13:35,000 Is that somebody Covid in the class, including private ones? 192 00:13:35,000 --> 00:13:42,000 There is another massive get constructors that Massata returns on the public constructors. 193 00:13:42,000 --> 00:13:45,000 There are also masses to the specific constructor. 194 00:13:45,000 --> 00:13:51,000 Get declared constructor and git constructor with class variable lengths argument. 195 00:13:51,000 --> 00:13:58,000 You can get the references, specific constructors that you need using the types of constructor parameters. 196 00:13:59,000 --> 00:14:04,000 For example, here I want to get the reference to the private constructor parameter of type string. 197 00:14:04,000 --> 00:14:08,000 I'm just possessory Gloucester's and Massett invocation. 198 00:14:08,000 --> 00:14:14,000 This massive miswrote two exceptions is the first one is no such massive exception. 199 00:14:15,000 --> 00:14:20,000 This exceptionable strong JS constructor was a specified parameter types and wasn't found. 200 00:14:20,000 --> 00:14:24,000 And the second exceptions may be strong is a security exception. 201 00:14:24,000 --> 00:14:29,000 This exception might be sold by the security manager to indicate a security violation. 202 00:14:30,000 --> 00:14:36,000 As you can see in console, we have managed to get the reference to a private constructor, the similar 203 00:14:36,000 --> 00:14:37,000 way we can work with masses. 204 00:14:38,000 --> 00:14:45,000 We get all masses, including privates, once we can get on the public masses and we can get specific 205 00:14:45,000 --> 00:14:45,000 masses. 206 00:14:46,000 --> 00:14:47,000 Let me show you a few examples here. 207 00:14:48,000 --> 00:14:53,000 I cogat declare mass it's massive and print massive names to console. 208 00:14:53,000 --> 00:15:00,000 In the next example here, I'm getting massive by its name and by list of these arguments. 209 00:15:00,000 --> 00:15:03,000 This is how we can separate overload. 210 00:15:03,000 --> 00:15:04,000 That's massive. 211 00:15:05,000 --> 00:15:08,000 The first message argument is a method name, just ring value. 212 00:15:09,000 --> 00:15:12,000 And after that, those verbal length's arguments of that class. 213 00:15:13,000 --> 00:15:16,000 I want to get the message that takes user argument. 214 00:15:16,000 --> 00:15:21,000 That's why I passed pass user class here and the printers and Massett to consult. 215 00:15:22,000 --> 00:15:28,000 As you can see, we have managed to get the object of representation of this massive to perform any 216 00:15:28,000 --> 00:15:29,000 actions we need. 217 00:15:29,000 --> 00:15:31,000 Was it when we tried to get. 218 00:15:32,000 --> 00:15:37,000 Always remember that we can face was no such massive exception and security exception. 219 00:15:38,000 --> 00:15:44,000 These are checked exceptions, and I will recommend you to handle those exceptions for the sake of the 220 00:15:44,000 --> 00:15:45,000 demo. 221 00:15:45,000 --> 00:15:49,000 I put them next Ostrowsky in my main message. 222 00:15:49,000 --> 00:15:50,000 OK. 223 00:15:50,000 --> 00:15:52,000 They learned the API and the high level. 224 00:15:53,000 --> 00:15:58,000 Now you know how you can get the reference to the definition of type elements, such as fields, constructors, 225 00:15:58,000 --> 00:16:03,000 methods, interface, a simple amount of superclass, et cetera. 226 00:16:03,000 --> 00:16:09,000 Now let's understand this topic and understand how to work with object of these types. 227 00:16:09,000 --> 00:16:14,000 Namely, I want you to understand what we can do with them. 228 00:16:14,000 --> 00:16:16,000 Let me start from the constructor. 229 00:16:17,000 --> 00:16:22,000 I am going to show you what important operations we may perform with objects of this type. 230 00:16:22,000 --> 00:16:25,000 I get the reference to the default constructor. 231 00:16:25,000 --> 00:16:32,000 And also I am going to use the reference to a constructor with parameter that we got in previous examples. 232 00:16:32,000 --> 00:16:34,000 Hence the reference to the constructor. 233 00:16:35,000 --> 00:16:41,000 We can create an instance of this class by calling new instance method, and in case we need to pass 234 00:16:41,000 --> 00:16:44,000 some arguments to instantiate the object of this type. 235 00:16:44,000 --> 00:16:46,000 We just passed them and that's it. 236 00:16:47,000 --> 00:16:54,000 I print these user objects to consult that tensions that I have managed even to instantiate object based 237 00:16:54,000 --> 00:16:56,000 on the private constructor. 238 00:16:56,000 --> 00:17:03,000 I have just another email and the email field was initialized in user object was valued even by me. 239 00:17:04,000 --> 00:17:05,000 Isn't that cool? 240 00:17:05,000 --> 00:17:08,000 Do you feel the power of reflection already or not yet? 241 00:17:09,000 --> 00:17:11,000 Let me show you another trick was a few. 242 00:17:11,000 --> 00:17:15,000 All our fields declared in user gloss are private. 243 00:17:15,000 --> 00:17:18,000 And this makes this trick even more interesting. 244 00:17:18,000 --> 00:17:24,000 Different frameworks may insert those in the field, even if there are no public systems. 245 00:17:24,000 --> 00:17:26,000 For example, Mosquita framework. 246 00:17:27,000 --> 00:17:31,000 When they use annotation inject, most fields of compatable was marked. 247 00:17:31,000 --> 00:17:36,000 Darbs are populated with mock objects or in spring framework. 248 00:17:36,000 --> 00:17:42,000 When I configure my spring events, I described object of what types I needed to be injected. 249 00:17:42,000 --> 00:17:45,000 Now I'm going to show you how to do that. 250 00:17:46,000 --> 00:17:51,000 For example, let's give the reference to the first name field and initialize it. 251 00:17:51,000 --> 00:17:55,000 You already know that I need to use get declared fields Massud. 252 00:17:55,000 --> 00:18:01,000 I can extract fields that they need by its name in addition to all previous exceptions. 253 00:18:01,000 --> 00:18:04,000 This massive, nice rule, no such field exception. 254 00:18:05,000 --> 00:18:10,000 I believe that from exception name, you can understand when this exception will be thrown. 255 00:18:11,000 --> 00:18:15,000 The first things that we need to do now is to set accessable mode. 256 00:18:15,000 --> 00:18:18,000 This is needed for private entities inside the class. 257 00:18:19,000 --> 00:18:25,000 Oh, with the exception, Joon's interaction with this entity I call set accessible to. 258 00:18:25,000 --> 00:18:30,000 After this, I can set the value to the field without any fear of exception. 259 00:18:31,000 --> 00:18:35,000 The whole region knows that field is a property of some object. 260 00:18:35,000 --> 00:18:37,000 Xus to initialize the field. 261 00:18:38,000 --> 00:18:42,000 We need to specify the object where we want to initialize this field. 262 00:18:43,000 --> 00:18:43,000 Does it make sense? 263 00:18:44,000 --> 00:18:48,000 Massart set of the field takes two massive arguments. 264 00:18:48,000 --> 00:18:52,000 The first one is the object that is used to initialize field. 265 00:18:52,000 --> 00:18:55,000 And the second one is a values that will be inserted. 266 00:18:55,000 --> 00:18:58,000 Those that fields one that brings the object to console. 267 00:18:58,000 --> 00:19:04,000 You can notice that first name field was updated with the values that we have just sent. 268 00:19:05,000 --> 00:19:11,000 One more thing thread here is that for certain primitives, types exist, separate masses like set in, 269 00:19:12,000 --> 00:19:19,000 said double seven, boolean, etc. For all reference types, you can use set methods that takes object 270 00:19:19,000 --> 00:19:23,000 s first methods, arguments, what to do in case there is a static field. 271 00:19:23,000 --> 00:19:26,000 Everson's is the same beside Wansink. 272 00:19:26,000 --> 00:19:30,000 You don't need to parse the reference to an object in this case. 273 00:19:30,000 --> 00:19:36,000 Just personal instead, like I do in this example, you can see that static. 274 00:19:36,000 --> 00:19:38,000 This has another value. 275 00:19:38,000 --> 00:19:43,000 Now we learned how to set field values, but how to read fields values. 276 00:19:43,000 --> 00:19:44,000 Very simple. 277 00:19:45,000 --> 00:19:46,000 You need to use gets Massart. 278 00:19:47,000 --> 00:19:48,000 The algorithm is the same. 279 00:19:49,000 --> 00:19:51,000 You get the reference to fields first. 280 00:19:51,000 --> 00:19:52,000 We already did that. 281 00:19:53,000 --> 00:20:00,000 So I would just use first name field and I'd field after that to change access mode in case fields are 282 00:20:00,000 --> 00:20:01,000 private. 283 00:20:01,000 --> 00:20:03,000 We have a really cool set. 284 00:20:03,000 --> 00:20:05,000 Sesame masses for both fields. 285 00:20:05,000 --> 00:20:07,000 That's why I don't do it again. 286 00:20:08,000 --> 00:20:10,000 And after that, I just get massive. 287 00:20:11,000 --> 00:20:17,000 I need to pass reference to the object where I want to read field in this field to study. 288 00:20:17,000 --> 00:20:19,000 You shouldn't pass that object. 289 00:20:20,000 --> 00:20:22,000 Is this clear in console? 290 00:20:22,000 --> 00:20:25,000 You can see how I managed to extract the first name. 291 00:20:25,000 --> 00:20:31,000 And I leave this for primitive tribes, use a separate group of masses like get in together, boolean, 292 00:20:31,000 --> 00:20:35,000 etc. to get the value of reference types. 293 00:20:35,000 --> 00:20:38,000 You can go just get massive, right in our example. 294 00:20:39,000 --> 00:20:42,000 Let me show you how we can work with masses. 295 00:20:42,000 --> 00:20:45,000 We can involve them on the object when we need. 296 00:20:46,000 --> 00:20:50,000 Basically, we have two masses that can help us to get the reference to the object. 297 00:20:50,000 --> 00:20:54,000 Masses get declared method and get massive. 298 00:20:55,000 --> 00:21:01,000 If I want to get a reference to the private mass, I have to use get declared mass in all cases. 299 00:21:01,000 --> 00:21:06,000 And it was the strings that contains massive name that I would like to get. 300 00:21:06,000 --> 00:21:10,000 And additionally, we need to pass colossus of parameter such. 301 00:21:11,000 --> 00:21:13,000 This is very blancs argument. 302 00:21:13,000 --> 00:21:18,000 So basically you can posse's and nothing here or colossus of all arguments. 303 00:21:19,000 --> 00:21:26,000 I plus private method name and sue here because this massive base string how I can find this urines 304 00:21:26,000 --> 00:21:33,000 around that again, just those examples of how you can get information about all masses in class after 305 00:21:33,000 --> 00:21:38,000 having the references to all masses, you can expose any names and parameters. 306 00:21:38,000 --> 00:21:42,000 That's how you can build code that explores the program. 307 00:21:42,000 --> 00:21:43,000 Jawanza runtime. 308 00:21:44,000 --> 00:21:49,000 After I have reference to this method, I have to call set accessible to true. 309 00:21:50,000 --> 00:21:56,000 Since this is private mass, I need to perform this massive communication with Iran as a program execution. 310 00:21:57,000 --> 00:21:59,000 After that, I can invoke Massett. 311 00:22:00,000 --> 00:22:02,000 And again, similarities and no static fields. 312 00:22:02,000 --> 00:22:07,000 I need an object doing the rows and massive all because massive. 313 00:22:07,000 --> 00:22:09,000 It is a behavior of an object. 314 00:22:09,000 --> 00:22:13,000 So once I get the mass, I can invoke the Private Massett on an object. 315 00:22:14,000 --> 00:22:18,000 And you can see that I postering argument do in console. 316 00:22:18,000 --> 00:22:20,000 You might notice a private mass has been called. 317 00:22:21,000 --> 00:22:22,000 How do you like it? 318 00:22:23,000 --> 00:22:26,000 As you can see, there are no more orders for reflection. 319 00:22:26,000 --> 00:22:30,000 API and encapsulation means nothing for reflection. 320 00:22:30,000 --> 00:22:37,000 By the way, this is also one of the reasons not to use the reflection API, because it may violate 321 00:22:37,000 --> 00:22:37,000 encapsulation. 322 00:22:38,000 --> 00:22:44,000 Reflection that you may access fields and perform operations that you are not supposed to perform. 323 00:22:44,000 --> 00:22:48,000 But as we discussed Zimride, the case is one reflection. 324 00:22:48,000 --> 00:22:54,000 API is needed to perform some actions that will make the development process easier. 325 00:22:54,000 --> 00:22:56,000 For example, was aesthetic Massart. 326 00:22:56,000 --> 00:22:59,000 Everson is the same beside one sink. 327 00:22:59,000 --> 00:23:03,000 You shouldn't parse the reference to an object to static muscle. 328 00:23:04,000 --> 00:23:06,000 Here's an example of static mess recreation. 329 00:23:07,000 --> 00:23:09,000 As you can see, there is nothing special. 330 00:23:10,000 --> 00:23:12,000 That's all what I wanted to share with you today. 331 00:23:13,000 --> 00:23:15,000 Let's review what we have learned in this lesson. 332 00:23:16,000 --> 00:23:21,000 In this lesson we learned was a reflection API is and why we need it. 333 00:23:21,000 --> 00:23:28,000 We reviewed that reflect package, and after that we started our reflection API on examples. 334 00:23:29,000 --> 00:23:36,000 You saw how we can work with different closs entities such as fields, constructors, methods, interfaces, 335 00:23:36,000 --> 00:23:39,000 super classes with the help of a section API. 336 00:23:40,000 --> 00:23:45,000 Separate group of examples related was private class entities and how to work with them. 337 00:23:45,000 --> 00:23:48,000 Private constructors, private masses, sprout's fields. 338 00:23:49,000 --> 00:23:52,000 That's all what I plan to share with you today. 339 00:23:52,000 --> 00:23:53,000 Thanks a lot for your attention. 340 00:23:54,000 --> 00:23:56,000 Have a great day and see you in the next lesson.