Въпрос за String

6 отговора 0 прегледа
#1

Въпрос за String

Искам като аргумент на метод да имам обект, но името на манипулатора на обекта да го напиша чрез String.

Пример:
Имам 10 обекта (а_0, а_1, а_2, а_3 ..., а_9). Искам и на десетте обекта да им приложа една и съща функция. За да не става дълъг кода искам да използвам цикъл, като променям само цифрите в края на имената на обектите. Тоест, да имам нещо като това:

MyType a_0 = new MyType();
MyType a_1 = new MyType();
MyType a_2 = new MyType();
MyType a_3 = new MyType();
...
MyType a_9 = new MyType();



for(int i = 0; i < 10; i++){
method("a_" + new Integer(i).toString()); //дано да ме разберете
}
.
.
.
...а метода ми да е
public void method(MyType object){
........................
}


дали не ставаше въпрос за форматиращ String или нещо подобно...
Благодаря!

Отговор
в отговор на Tepcит #2

Re: Въпрос за String

Нещо не мога да ти схвана идеята. Или нещо не обясняваш както трябва или не знаеш какво правиш.

Отговор
в отговор на Tepcит #3

Re: Въпрос за String

Въпросът ти няма нищо общо със стрингове.

Това, което искаш да направиш, може да се направи през reflection, примерно:

public SomeClass a_0 = new SomeClass("a_1");
...
public SomeClass a_2 = new SomeClass("a_2");
public SomeClass a_9 = new SomeClass("a_9");

public void exec() throws Exception {
for (int i = 0; i <= 9; i++) {
SomeClass sC = (SomeClass) this.getClass().getField("a_" + i).get(this);
method(sC);
}
}

Не знам какъв е дизайнът ти и дали налага reflection, не можеш ли просто да си държиш обектите в масив или някакъв контейнер от сорта на Hashtable?

Отговор
в отговор на тepмит #4

Re: Въпрос за String

Съгласен с тepмит, само кастването май не е ок (не съм сигурен), трябва да кастнеш към типа на променливата, а не към типа на класа, но това не е от голямо значение.

Иначе и аз смятам че е по-добре да използваш някакъв сорт Лист или Мап... Макар че с рефлекшън би станало, това не прави кода ти нито четлив, нито гъвкав.

Поздрави и успех :)

Отговор
в отговор на Tepcит #5

Re: Въпрос за String

Начи стандартно в обектно ориентираното програмиране на това, което може за се прави с един обект му викаме метод.
Ако имаш много обекти от един тип и искаш да им викнеш един и същ метод мога да те зарадвам, че има супер стандартно решение.
Правиш един интерфейс и караш всичките класове, които те интересуват да го имплеметират. След това си създаваш обекти на тези класове както ти е угодно.
Правиш един лист с Дженерикс и бухаш вътре всичките си обекти. Дженерикса на листа ще е интерфейса, който наследяват класовете на обектите ти.
Въртиш листа, викаш метода и се кефиш.

Работата с рефлекция я забрави. По принцип клиентско приложение не трябва да работи с рефлекшън.

ПС
Може и без Дженерикс ама трябва да сме в крак с модата

Отговор
в отговор на Tepcит #6

Re: Въпрос за String

Моето предложение в случая е обектите просто да ги предадеш на оработващия мето като object array:


void doSomething(MyType[] objects) {
// Малко проверки за коректност, ако се налага

for (int i = 0; i < objects.length; i++) {
objects.specificMethod(...);
}
}


Отговор
в отговор на Barracuda #7

Re: Въпрос за String

МДааа, не съм прочел правилно условието...
Извинявам се за последния пост ;-)

Отговор