2015-11-13 3 views
1

Мне нужно захватить int из объекта [] [], но понятия не имею, как это сделать с отражением.Grabbing int from object [] [] array Java Reflect

Я использовал этот метод, чтобы захватить его от объекта []

public static Object getInterfaceObject(String clazz, String field, Object obj, int index) { 
    try { 
     Client client = Boot.client; 
     ClassLoader cl = client.classLoader; 
     Class<?> c = cl.loadClass(clazz); 
     Field f = c.getDeclaredField(field); 
     f.setAccessible(true); 
     Object arr = f.get(client.getClient()); 
     return (Object) Array.get(arr, index); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return null; 


} 

Поскольку это следующий один объект [] [], я не знаю, как идти об этом.

Я хочу, чтобы в основном быть в состоянии сделать

getInterfaceObject()[arg1][arg2].otherStuff(); 
+1

Имейте в виду, что если массив действительно 'Object [] []', то это ** не может ** содержать 'int'. Вам нужно получить «Integer» и извлечь завернутое значение. –

ответ

0

Вы можете обратное приведение объекта к Object [] [] так:

((Object[][]) getInterfaceObject())[arg1][arg2].otherStuff(); 

Или что внутри getInterfaceObject:

public static Object[][] getInterfaceObject(String clazz, String field, Object obj, int index) { 
    try { 
     Client client = Boot.client; 
     ClassLoader cl = client.classLoader; 
     Class<?> c = cl.loadClass(clazz); 
     Field f = c.getDeclaredField(field); 
     f.setAccessible(true); 
     Object arr = f.get(client.getClient()); 
     return (Object[][]) Array.get(arr, index); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

И оставить callsite, как вы хотели:

getInterfaceObject()[arg1][arg2].otherStuff(); 

Некоторые из моих взглядов на чистый код (принять или оставить, конечно):

  1. Предпочитают бросить новый RuntimeException (е); - e.printStackTrace(); (изменить шаблон IDE)
  2. Предпочитаете явный код для отражения. Отражение теряет безопасность типа.
  3. Предпочитаю конкретные типы, Object
+0

@ EthanBrookman это отвечает на ваш вопрос? –