Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Массив + reflect.Field / 8 сообщений из 8, страница 1 из 1
06.03.2017, 19:03
    #39414961
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив + reflect.Field
Доброго дня господа !

Работаю с полей объекта, в котором задекларирован массив в нем пользоват. тип,
пытаюсь выйти на значение поля этого массива.

Подскажите как это правильно сделать используя "путь" "list"."Name"

Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

class Record
{
	String Name;
	String Exec;

        public Record(String _Name,
        	             String _Exec
		   	   )
       {
   	    this.Name=_Name;
    	    this.Exec=_Exec;
       }
}

public class execute {

	public List<Record> list;
	
	public execute() 
	{
		this.list      = new ArrayList<Record>();
		this.list.add(new Record("Num 1","Hello"));
		this.list.add(new Record("Num 2","Buhlo"));
	}

	public static void main(String[] args) 
                 throws NoSuchFieldException, SecurityException,IllegalArgumentException,IllegalAccessException 
	{
             Field table,field;
             String sect   ="list";
             String name ="Name";

             execute a = new execute();
             table = a.getClass().getDeclaredField(sec);
             Object o = table.get(a);   - вернул массив

        -- Как обратиться ниже не понимаю
      	    field=table.getType().getDeclaredField(part);
    	    System.out.println("Executed "+o);
	}
}



Заранее благодарен !
...
Рейтинг: 0 / 0
06.03.2017, 19:06
    #39414962
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив + reflect.Field
HOME_XДоброго дня господа !

Работаю с полей объекта, в котором задекларирован массив в нем пользоват. тип,
пытаюсь выйти на значение поля этого массива.

Подскажите как это правильно сделать используя "путь" "list"."Name"

Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

class Record
{
	String Name;
	String Exec;

        public Record(String _Name,
        	             String _Exec
		   	   )
       {
   	    this.Name=_Name;
    	    this.Exec=_Exec;
       }
}

public class execute {

	public List<Record> list;
	
	public execute() 
	{
		this.list      = new ArrayList<Record>();
		this.list.add(new Record("Num 1","Hello"));
		this.list.add(new Record("Num 2","Buhlo"));
	}

	public static void main(String[] args) 
                 throws NoSuchFieldException, SecurityException,IllegalArgumentException,IllegalAccessException 
	{
             Field table,field;
             String sect   ="list";
             String name ="Name";

             execute a = new execute();
             table = a.getClass().getDeclaredField(sect);
             Object o = table.get(a);   - вернул массив

        -- Как обратиться ниже не понимаю
      	    field=table.getType().getDeclaredField(part);
    	    System.out.println("Executed "+o);
	}
}



Заранее благодарен !
...
Рейтинг: 0 / 0
06.03.2017, 19:06
    #39414963
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив + reflect.Field
ArrayList это не массив. Это List. А зачем в нём ковыряться рефлексией? Почему просто к List или Collection не привести?
...
Рейтинг: 0 / 0
06.03.2017, 19:14
    #39414971
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив + reflect.Field
BlazkowiczArrayList это не массив. Это List. А зачем в нём ковыряться рефлексией? Почему просто к List или Collection не привести?


У меня есть следующая установка строка = "list"."Name"
Какой это тип изначально неизвестно.
Подскажите пожалуйста на примере

P.S.
Это результат распарсиван. некого установочного кода ....
(примите это как неизменную вселенскую истину)
...
Рейтинг: 0 / 0
07.03.2017, 13:11
    #39415421
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив + reflect.Field
HOME_X,

Решение следующее
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
	public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, ClassNotFoundException 
	{
        Field  field;
        int    row  = 1; 
        String sect = "list";
        String part = "Name";
        execute example = new execute();
        
        field = example.getClass().getDeclaredField(sect);
        ParameterizedType pt = (ParameterizedType) field.getGenericType();
        Class<?> anyClass = Class.forName(pt.getActualTypeArguments()[0].getTypeName());
        List<Object> list = (List<Object>)  field.get(example);
        field = anyClass.cast(list.get(row)).getClass().getDeclaredField(part);
        String s = (String) field.get(anyClass.cast(list.get(row)));
    	System.out.println("Executed "+s);
	}



Спасибо за участие
...
Рейтинг: 0 / 0
07.03.2017, 13:18
    #39415433
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив + reflect.Field
HOME_X,

Обычно, когда пишут фреймверк, то коллекции и другие стандартные типы вводят как явный тип.

Код: java
1.
2.
3.
if(obj instanceof Collection) {
   return ((Collection)obj).iterator().next(); //Или любой другой метод наиболее абстрактного типа
}



Что на много проще того что вы привели.
...
Рейтинг: 0 / 0
07.03.2017, 13:22
    #39415441
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив + reflect.Field
Blazkowicz,

Чет я провтыкал. Там же Iterable можно. С другой стороны пользы от этого мало. Массивы его не реализуют.
...
Рейтинг: 0 / 0
07.03.2017, 20:59
    #39415706
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Массив + reflect.Field
HOME_X,

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


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