2016-06-05 13 views
0

In Android gibt es eine nicht deklarierte (versteckte) Klasse namens "android.graphics.FontFamily" und ich möchte statische Array davon erstellen. Irgend etwas wie folgt aus:Erstellen Sie ein statisches Array mit Class.forName

Class<?> clazz = Class.forName("android.graphics.FontFamily"); // Ok. 
Class<?> clazz_array = Class.forName("android.graphics.FontFamily[]"); // Method threw 'java.lang.ClassNotFoundException' exception. 

Um diesen hypothetischen Code zu bauen:

FontFamily[] families = {fontFamily}; 

Wie kann ich es tun?

Vielen Dank.

+0

Was bedeutet "nicht deklarierte (versteckte) Klasse"? Es bedeutet "privat", "verschachtelt statisch privat" oder "inner privat"? –

+1

siehe 'Array.newInstance', Dokumentation – pskink

+0

@pskink Wenn ich gut verstanden das Array ist nicht in dieser Klasse deklariert, er will einfach ein Array dieser privaten Klasse erstellen –

Antwort

3

Sie sollten in der Lage sein, ein Array reflektiv zu erstellen und dann seine Klasse zu erhalten. Beispiel:

Class <?> clazz = Class.forName("android.graphics.FontFamily"); 
Object fontFamily = clazz.newInstance(); 
Object families = Array.newInstance(clazz, 1); 
Array.set(families, 0, fontFamily); 
+0

Ok, clazzArray ist Klasse, und wie kann ich eine Instanz davon instantiante, die 1 Element (wie FontFamily [] families = {fontFamily}) hat? –

+1

@mhtaqia siehe 'java.lang.reflect.Array' Dokumentation – pskink

1

Sie die vollständig qualifizierten Namen in den Class documentation wie angegeben angeben soll. Also in Ihrem Fall wäre es:

Class<?> clazzArray = Class.forName("[Landroid.graphics.FontFamily;"); 

Die [ zeigt ein Array, und dann wird der L Präfix und Suffix Semikolon ist, um anzuzeigen, dass der Teil in der Mitte ein Klassenname ist.

+0

Vielen Dank, gute Antwort. –

Verwandte Themen