Създаване на динамично поле
Основни Java технологии /
Отражение (API за отражение)
Здравейте, моля, помогнете ми да разреша този проблем: има две променливи, едната от тип Type, втората от тип String например, по-конкретно:
Има ли възможност и ако да, как да създадете динамично променлива от типа, който се съхранява в полето за тип, и да й присвоите съответно стойността str. нещо като:
тоест, ако променливата на типа, например, съхранява стойността на Double.class, тогава променлива от тип Double трябва да бъде създадена динамично. разбира се, че променливата тип може също да съдържа препратки към дефинирани от потребителя типове, не е известно предварително кой тип ще бъде там. методът valueOf() е допустимо дефиниран за тях.
се опита да го организира с помощта на генерични лекарства. не овладя.
Обяснете задачата по-общо, иначе просто чувствам, че щяха да тръгнат в грешната посока, но не знам къде щяха да отидат.
Аналогия. Идва човек при теб, как да точи лопата. Можете да обясните как да заточите, но можете да попитате: "Защо имате нужда от лопата?" И ако, например, той каже, че "трябва да се изкопае канавка", предложете да използвате багер, който стои в задния двор без работа.
По-конкретно какво трябва да се направи. Основното нещо е да не се объркате още повече. Относно типовете потребители вероятно съм се объркал. По-скоро ще трябва да работите само с Number, String. Така че има bean клас, който има полета от различни типове, например:
За всяко поле има съответно публични сетери и гетери.
Има и конфигурационен файл като: parameter=value
Задача: прочетете самия файл и попълнете съответните полета. Необходимо изпълнение: напишете външна библиотека, когато е свързана, достъп до обект, например "PReader", койтоизпълнява тази задача. Създаден е в клас А. В същото време той динамично определя дали има сетери за намерените полета във файла.
Стигнах до точката, в която получавам метода, от който се нуждая, например SetZ(Double z), като обект Method metod и получавам типа на параметъра, който приема като обект тип Type. За да изпълните (извикате) метода, трябва да изпълните method.invoke(object, VALUE); където VALUE трябва да е от тип тип. По-конкретно, тук трябва да създадете променлива от тип Double и да й присвоите стойност 3.4 и да я предадете на извикването на метода. Докато реши всичко с помощта на if-ov.
Мислех, че може би може да се подреди по по-красив начин :) затова попитах за динамичното създаване на променливи ..