Develnotes - отражение в Ява - няколко примера

Отражение в Java - няколко примера.

Според Уикипедия, отражение - процес, по време на които програмата може да следи и променя структурата си по време на изпълнение. Можем да кажем, че програмата ", пише тя," част от самия код, точно по време на неговото изпълнение. Reflection - подвид на мета-програмиране - създаване на програми в процеса на изпълнение на други програми генерират. В този случай, някаква част (или всички) програма е проектирана така, че програмата е създадена по време на изпълнението на някои логика, че в "нормална" подход създава програмист. За какво? Това е много проста - понякога някои от данните, които са от съществено значение за създаването на алгоритъма не е на разположение на етапа на проектиране на програмата. Например: известно е, че необходимостта да се произвеждат определени методи на даден обект, но какво - ще стане ясно само по време на изпълнение. Тук идва на отражението на помощ. Въпреки това, бих искал да дам няколко прости примери за прилагането на размисъл в Java. Нека да разгледаме тях - ще стане по-ясно, когато можете да използвате размисъл към конкретна ситуация.

Пример 1: създаване обект.

Да речем, че искате да създадете копие на определен обект. Какви конкретни тип обект, не е ясно в началото, ние само знаем, че това е най-високата тип в йерархията на Java обекти - java.lang.Object. Ако възможни типове обекти са предварително известни, ние можем да осигурим проверка с помощта instanceof оператор. Но предполагам - много видове и осигуряване на проверка за всеки един от тях не е възможно, трябва цялостно решение. След създаването на копие на даден обект някои действия могат да се извършват с нея, отново с помощта на размисъл. В крайна сметка, ние не знаем какъв тип обект е приет - и това не е необходимо. Един много прост пример:

Пример 2: извикване на метод на обект.

Нека да разгледаме един метод, който позволява да се обадите на всеки един обект, наречен метод. Ако този метод не съществува, той ще бъде хвърлен NoSuchMethodException. Изключение Прихващане Определете защото вика метод на обект може да генерира други изключения.

Както може да се види, методът позволява да се обадите на всеки един метод се нарича - с или без аргументи. Необходимо е да се обърне внимание на метода findMethodAtClass. Тя ще изглежда, че ние знаем реалната вида на обекта, знаете името на метода, това, което ви е необходимо?

Факт е, че ако този метод се позовава на един обект с помощта на размисъл - че е необходимо да се знае кои клас определя метода. Да кажем - целевата класа е подклас на суперкласа, който определя желания метод, и в целевия клас няма такова метод - ние трябва да знаем. Вземете Метод обект на подкласа няма да работи. Това прави справка за определен метод - по-висок клас йерархия, започвайки с ток (тип, който е дадения обект).

Пример 3: достъп до полета клас.

С размисъл, можете да получите достъп до който и да е име на поле клас.

Develnotes - отражение в Ява - няколко примера

Можете да четат и променят стойностите на частни области, и дори крайните полета. По-точно - можете да "в движение", за да се направи подобно поле отворен за четене и / или промени - така че можете да получите достъп до тази област, която е обявена като частна, на който и да е клас. Като пример - един клас със самостоятелна окончателното име на поле. Прочетете стойността на терена, можехме да го отворите, и след това да промените стойността: