2015-11-13 31 views
1

我需要從對象[] []中獲取int,但不知道如何使用反射來完成此操作。從對象抓取int [] []數組Java反射

我用這個方法從一個物體抓住它[]

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

注意,如果數組是一個真正的'對象[] []',那麼它**不能**包含'int'。你需要檢索一個'Integer'並提取包裝的值。 –

回答

0

您可以向下轉換的對象對象[] []這樣的:

((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; 
} 

正如你所期望留下您的調用點:

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

我的幾個乾淨的代碼(或取當然離開)意見:

  1. 身高:拋出新的RuntimeException(E);e.printStackTrace();(更改IDE模板)
  2. 優先選擇反射的顯式代碼。反射失去了類型安全。
  3. 身高特定類型對象
+0

@EthanBrookman這是回答你的問題嗎? –