2012-03-09 49 views
0

一個數組,我想,我傳遞作爲一個字符串參數的函數中打印數組名的名稱:如何打印在Java

public static String[][] cleanCSVtable(String[][] data_table) {} 

,而不是像這樣:

[[Ljava.lang.String;@ba4539 

例如讓我們假設,我的主要功能之外的所限定的本數組作爲

public static String [][] XYZ = null; 

我想這個有趣的範圍內的打印XYZ ction代替

[[Ljava.lang.String;@ba4539. 

任何黑客/提示/想法?

+0

這個問題很難閱讀。簡而言之,不,你不能以任何合理的方式做到這一點。你可以檢查字節碼,並可能得到的信息,但現在。 – 2012-03-09 18:05:26

+2

這個數組的名字,只要有一個,就是'[[Ljava.lang.String; @ ba4539'。 'XYZ'只是其中一個參考的名稱,'data_table'是另一個參考。 – ibid 2012-03-09 18:06:16

+1

看到這個問題的答案[Java反射:如何獲得變量的名稱?](http://stackoverflow.com/questions/744226/java-reflection-how-to-get-the-name-of-a - 變量) – Alex 2012-03-09 18:09:46

回答

2

對象不名稱,除非你是在談論它有一個name屬性的特定類型。

在這種情況下,XYZ是的變量名稱,而不是一個對象。兩個(或更多)變量可能指向同一個對象。例如:

String[][] foo = new String[10][50]; 
String[][] bar = foo; 

聽起來也許你需要一個CsvTable包含字符串數組和有名稱的獨立變量。

4

這是不可能的。 XYZ只是變量名稱,無法訪問。如果您確實依賴於數組的內容的某些文本描述,則可以將其包裝在包含名爲description或類似的字符串或枚舉字段的類中。

2

Jon和Sorvahr是對的。沒有常規方法來查找包含數組的變量名稱。此外在你的情況下,它不是原始的,所以變量只包含對數組的引用。可以有很多指向同一個數組的引用,所以你想要發現哪一個?

但還有其他方法可以幫助你。 Java字節代碼包含類字段的名稱,因此如果您的變量是在類級別上定義的,而不是方法的內部變量,則可以自己分析字節碼並提取此名稱。

顯然它不是那麼簡單的任務,但有工具可以幫助你。在上週我玩了一點Javassist,這絕對可以讓你做到這一點。您可以發現正在運行的類的字節碼,並提取包含對特定數組的引用的字段的名稱。

我現在唯一的問題是「爲什麼」?