Въпрос за String
6 отговора
0 прегледа
Въпрос за 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 или нещо подобно...
Благодаря!
Пример:
Имам 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 или нещо подобно...
Благодаря!
Re: Въпрос за String
Нещо не мога да ти схвана идеята. Или нещо не обясняваш както трябва или не знаеш какво правиш.
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?
Това, което искаш да направиш, може да се направи през 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?
Re: Въпрос за String
Съгласен с тepмит, само кастването май не е ок (не съм сигурен), трябва да кастнеш към типа на променливата, а не към типа на класа, но това не е от голямо значение.
Иначе и аз смятам че е по-добре да използваш някакъв сорт Лист или Мап... Макар че с рефлекшън би станало, това не прави кода ти нито четлив, нито гъвкав.
Поздрави и успех :)
Иначе и аз смятам че е по-добре да използваш някакъв сорт Лист или Мап... Макар че с рефлекшън би станало, това не прави кода ти нито четлив, нито гъвкав.
Поздрави и успех :)
Re: Въпрос за String
Начи стандартно в обектно ориентираното програмиране на това, което може за се прави с един обект му викаме метод.
Ако имаш много обекти от един тип и искаш да им викнеш един и същ метод мога да те зарадвам, че има супер стандартно решение.
Правиш един интерфейс и караш всичките класове, които те интересуват да го имплеметират. След това си създаваш обекти на тези класове както ти е угодно.
Правиш един лист с Дженерикс и бухаш вътре всичките си обекти. Дженерикса на листа ще е интерфейса, който наследяват класовете на обектите ти.
Въртиш листа, викаш метода и се кефиш.
Работата с рефлекция я забрави. По принцип клиентско приложение не трябва да работи с рефлекшън.
ПС
Може и без Дженерикс ама трябва да сме в крак с модата
Ако имаш много обекти от един тип и искаш да им викнеш един и същ метод мога да те зарадвам, че има супер стандартно решение.
Правиш един интерфейс и караш всичките класове, които те интересуват да го имплеметират. След това си създаваш обекти на тези класове както ти е угодно.
Правиш един лист с Дженерикс и бухаш вътре всичките си обекти. Дженерикса на листа ще е интерфейса, който наследяват класовете на обектите ти.
Въртиш листа, викаш метода и се кефиш.
Работата с рефлекция я забрави. По принцип клиентско приложение не трябва да работи с рефлекшън.
ПС
Може и без Дженерикс ама трябва да сме в крак с модата
Re: Въпрос за String
Моето предложение в случая е обектите просто да ги предадеш на оработващия мето като object array:
void doSomething(MyType[] objects) {
// Малко проверки за коректност, ако се налага
for (int i = 0; i < objects.length; i++) {
objects.specificMethod(...);
}
}
Re: Въпрос за String
МДааа, не съм прочел правилно условието...
Извинявам се за последния пост ;-)
Извинявам се за последния пост ;-)