Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Передача параметров массивом (поля обьекта) / 19 сообщений из 19, страница 1 из 1
18.04.2017, 15:19
    #39440245
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров массивом (поля обьекта)
Доброго дня господа !

Как передать поля объекта в функцию и в функции изменить их
int l = ini.ArrayToField(new String[] {ini.path.Tab,ini.path.Name,ini.path.Ru,ini.path.Rd,ini.path.Class},
new String[] {file.TAB ,file.NAME ,file.RU ,file.RD ,file.CLASS}
);

Меняем поля объекта ini.path на поля объекта file

Пытаюсь через ArrayList - неверно ...

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
     int l = ini.ArrayToField(new ArrayList[] { new ArrayList<String>(Arrays.asList(ini.path.Tab  )),
	    		                                        new ArrayList<String>(Arrays.asList(ini.path.Name )),
					                        new ArrayList<String>(Arrays.asList(ini.path.Ru   )),
					                        new ArrayList<String>(Arrays.asList(ini.path.Rd   )),
					                        new ArrayList<String>(Arrays.asList(ini.path.Class)),
					                     },new String[] {file.TAB,file.NAME,file.RU,file.RD,file.CLASS});

    public int ArrayToField(ArrayList _fields[],String _values[])
    {
    	for (int i=0;i<_fields.length;i++) _fields[i].set(0,_values[i]);
		return _fields.length;
    }



Буду признателен за пример ....
...
Рейтинг: 0 / 0
18.04.2017, 15:23
    #39440248
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров массивом (поля обьекта)
HOME_X,

Воспользуйтесь рефлексией.

А что это за объект ini.path ?
...
Рейтинг: 0 / 0
18.04.2017, 15:37
    #39440261
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров массивом (поля обьекта)
HOME_X,

Вот так можно.
Код: java
1.
2.
3.
4.
5.
ini.path.Tab = file.TAB;
ini.path.Name = file.NAME;
ini.path.Ru = file.RU;
ini.path.Rd = file.RD;
ini.path.Class = file.CLASS;
...
Рейтинг: 0 / 0
18.04.2017, 15:45
    #39440267
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров массивом (поля обьекта)
BeanUtils.copyProperties (ini.path, file);
...
Рейтинг: 0 / 0
18.04.2017, 15:55
    #39440277
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров массивом (поля обьекта)
UsmanHOME_X,

Воспользуйтесь рефлексией.

А что это за объект ini.path ?

Да просто пользовательский обьекта , типа record
Все поля, которые будут меняться это String.
...
Рейтинг: 0 / 0
18.04.2017, 15:55
    #39440278
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров массивом (поля обьекта)
BlazkowiczHOME_X,

Вот так можно.
Код: java
1.
2.
3.
4.
5.
ini.path.Tab = file.TAB;
ini.path.Name = file.NAME;
ini.path.Ru = file.RU;
ini.path.Rd = file.RD;
ini.path.Class = file.CLASS;



Это я знаю - это не интересно ....
...
Рейтинг: 0 / 0
18.04.2017, 16:00
    #39440284
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров массивом (поля обьекта)
Usman BeanUtils.copyProperties (ini.path, file);


Это досмотрю изучу - спасибо


А скажите через функцию это трудно ?
Полагал это самый простой способ ..., полагал просто слить адреса и в них осуществить запись
(рефлексией знакома)
...
Рейтинг: 0 / 0
18.04.2017, 16:08
    #39440294
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров массивом (поля обьекта)
HOME_XЭто я знаю - это не интересно ....
"Это" на много проще (в пост врывается Оккам), а соответственно лучше вашего решения. Подумайте над этим.
...
Рейтинг: 0 / 0
18.04.2017, 16:14
    #39440299
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров массивом (поля обьекта)
Usman BeanUtils.copyProperties (ini.path, file);
Если бы автор ещё хоть раз задумался о Coding Convention, то оно может быть и сработало.
...
Рейтинг: 0 / 0
18.04.2017, 16:21
    #39440308
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров массивом (поля обьекта)
HOME_XА скажите через функцию это трудно ?

Нет, не трудно. Только у вас поля вместо функций. А геттеры и сеттеры очень легко заворачиваются в Consumer/Producer.
Но даже через лямбды ваш код полностью лишен смысла. От моего кода он отличается только константой 5, которую вернет метод:

Код: java
1.
2.
3.
4.
5.
6.
ini.path.Tab = file.TAB;
ini.path.Name = file.NAME;
ini.path.Ru = file.RU;
ini.path.Rd = file.RD;
ini.path.Class = file.CLASS;
int l = 5;



Вы даже не пытаетесь понять сколько лишнего шума создаёте в коде подобной ерундой.
...
Рейтинг: 0 / 0
18.04.2017, 17:01
    #39440353
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров массивом (поля обьекта)
HOME_XЭто я знаю - это не интересно .... https://habrahabr.ru/post/246993/
BlazkowiczЕсли бы автор ещё хоть раз задумался о Coding Convention, то оно может быть и сработало.(:
...
Рейтинг: 0 / 0
18.04.2017, 17:20
    #39440371
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров массивом (поля обьекта)
Usman,

Нет вопросов господа, у меня есть несколько вариантов - я изучу неизвестное (спасибо за ссылки)
Покажите пожалуйста как реализовать через ArrayList - МНЕ ПРОСТО ЛЮБОПЫТНО .....


Например так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
int l = ini.ArrayToField(new String[] {"Tab","Name","Ru","Rd","Class"},new String[] {file.TAB,file.NAME,file.RU,file.RD,file.CLASS});
    public int ArrayToField(String _fields[],String _values[])
    {
    	for (int i=0;i<_fields.length;i++) 
    	{
			try 
			{
				Path.class.getDeclaredField(_fields[i]).set(this.path,_values[i]);
			}
			catch (Exception e) 
			{
				System.out.println("Error null");
			}	
    	} 
		return _fields.length;
    }
...
Рейтинг: 0 / 0
18.04.2017, 17:33
    #39440388
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров массивом (поля обьекта)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
set(new String[] {file.TAB,file.NAME,file.RU,file.RD,file.CLASS},
ini.path::setTab,
ini.path::setName,
ini.path::setRu,
ini.path::setRd,
ini.path::setClass
);


set(new String[] {file.TAB,file.NAME,file.RU,file.RD,file.CLASS},
s -> ini.path.Tab = s,
s -> ini.path.Name= s,
s -> ini.path.Ru = s,
s -> ini.path.Rd = s,
s -> ini.path.Class = s,
);

set(String[] values, Consumer ... consumers) {
    for(int i = 0; i < consumers.length; i++) {
          consumers[i].accept(values[i]);
    } 
}
...
Рейтинг: 0 / 0
18.04.2017, 17:34
    #39440391
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров массивом (поля обьекта)
HOME_XПокажите пожалуйста как реализовать через ArrayList - МНЕ ПРОСТО ЛЮБОПЫТНО .....

Почему именно ArrayList? Почему ПРОСТО ЛЮБОПЫТНО сделать бестолковый код?
...
Рейтинг: 0 / 0
18.04.2017, 20:47
    #39440482
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров массивом (поля обьекта)
BlazkowiczПочему именно ArrayList? Почему ПРОСТО ЛЮБОПЫТНО сделать бестолковый код?


Стереотип - привычка ....
в ряде случаях работаю непосредственно с указателями, (ссылками) В Javе - передача
по ссылке невозможна, по используя массив можно получить что-то аналогичное.
...
Рейтинг: 0 / 0
22.04.2017, 16:59
    #39442699
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров массивом (поля обьекта)
Blazkowicz
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
set(new String[] {file.TAB,file.NAME,file.RU,file.RD,file.CLASS},
ini.path::setTab,
ini.path::setName,
ini.path::setRu,
ini.path::setRd,
ini.path::setClass
);


set(new String[] {file.TAB,file.NAME,file.RU,file.RD,file.CLASS},
s -> ini.path.Tab = s,
s -> ini.path.Name= s,
s -> ini.path.Ru = s,
s -> ini.path.Rd = s,
s -> ini.path.Class = s,
);

set(String[] values, Consumer ... consumers) {
    for(int i = 0; i < consumers.length; i++) {
          consumers[i].accept(values[i]);
    } 
}



Не могли бы уточнить код - не могу добиться реализаци..
Lambda использовал в таком варианте

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
numbers.forEach((Integer value) -> System.out.println(value));

set(new String[] {file.TAB,file.NAME,file.RU,file.RD,file.CLASS},
s -> ini.path.Tab = s,
s -> ini.path.Name= s,
s -> ini.path.Ru = s,
s -> ini.path.Rd = s,
s -> ini.path.Class = s,
);

Требует создание нового метода
...
Рейтинг: 0 / 0
25.04.2017, 11:48
    #39443961
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров массивом (поля обьекта)
HOME_X,

Blazkowicz - уточните пожалуйста как добиться Вашего эффекта по приему с lambdoй

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
set(new String[] {file.TAB,file.NAME,file.RU,file.RD,file.CLASS},
ini.path::setTab,
ini.path::setName,
ini.path::setRu,
ini.path::setRd,
ini.path::setClass
);


set(new String[] {file.TAB,file.NAME,file.RU,file.RD,file.CLASS},
s -> ini.path.Tab = s,
s -> ini.path.Name= s,
s -> ini.path.Ru = s,
s -> ini.path.Rd = s,
s -> ini.path.Class = s,
);



Необходим свой метод ? его тело - приведите кодом
Или это подключение библиотеки - какая именно ?
...
Рейтинг: 0 / 0
25.04.2017, 12:07
    #39443974
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров массивом (поля обьекта)
HOME_X,

Бросайте вы эту Java

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
import java.util.function.Consumer;

public class Test {
    static class Path{
        String tab;
        String name;

        public void setTab(String tab) {
            this.tab = tab;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
    public static void main(String[] args) {
        Path path = new Path();
        set(new String[] {"tab", "name"},
                path::setTab,
                path::setName
        );

        set(new String[] {"tab", "name"},
                s -> path.tab = s,
                s -> path.name = s
        );
    }

    static<T> void set(T[] values, Consumer<T> ... consumers) {
        for(int i = 0; i < consumers.length; i++) {
            consumers[i].accept(values[i]);
        }
    }
}
...
Рейтинг: 0 / 0
25.04.2017, 14:11
    #39444104
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров массивом (поля обьекта)
Blazkowicz,

Спасибо за пример

Меня на интерфейсы потянуло (interface)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Передача параметров массивом (поля обьекта) / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]