2 Stimmen

Java Reflection - Bearbeitung der Array-Länge

Ich habe mich gefragt, ob es möglich ist, die Länge eines Integer-Arrays einer Klasse mithilfe der Java Reflection API zu ändern. Wenn ja, wie?

4voto

obataku Punkte 28674

Nein, es wird ein Array mit einer festen Länge erstellt.

Was Sie kann nahe kommen, indem sie den Wert des Feldes mit einer コピー in größer Array (mit Arrays.copyOf ), sofern Sie wissen, dass eine solche Änderung nicht zu Inkonsistenzen führen wird.

/* desired length */
final int desired = ...;
/* the instance of the object containing the int[] field */
final Object inst = ...;
/* the handle to the int[] field */
final Field field = ...;
field.set(inst, Arrays.copyOf((int[]) field.get(inst), desired));

2voto

neo Punkte 1014

Ich glaube nicht, dass es möglich ist, die Array-Länge auch mit Reflection zu ändern.

Dies ist eine Referenz aus dem Java-Tutorial.

Ein Array ist ein Containerobjekt, das eine feste Anzahl von Werten eines einzigen Typs enthält. Die Länge eines Arrays wird bei der Erstellung des Arrays festgelegt. Nach der Erstellung ist die Länge fest.

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

1voto

sakthisundar Punkte 3172

Bei einem Array handelt es sich um eine Datenstruktur mit fester Länge, so dass ihre Länge nicht geändert werden kann. Nichtsdestotrotz kann man ein neues Array mit einer neuen festen Länge erstellen, so dass es neue Mitglieder aufnehmen kann, indem man

System.arrayCopy()

Es ist, als ob Sie ein Array vom Typ T mit der Größe 2 haben,

T[] t1 = new T[2]

und seine Länge ist mit 2 festgelegt. Es kann also nicht mehr als 2 Elemente speichern. Aber durch das Erstellen eines neuen Arrays mit einer neuen festen Länge, sagen wir 5,

T[] t2 = new T[5]

Es können also jetzt 5 Elemente untergebracht werden. Kopieren Sie nun den Inhalt von t1 nach t2 mit

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

in diesem Fall des Beispiels,

System.arraycopy(t1, 0, t2, 0, t1.length)

In dem neuen Array haben Sie nun die Position

von t1.length bis t2.length-1

ist für Sie verfügbar.

0voto

Amit Deshpande Punkte 18721

Ich schätze, Java wird nicht zulassen, dass Sie Array Länge ändern, aber ja können Sie Wert auf Index mit Reflexion festgelegt.

 import java.lang.reflect.*;

 public class array1 {
  public static void main(String args[])
  {
     try {
        Class cls = Class.forName(
          "java.lang.String");
        Object arr = Array.newInstance(cls, 10);
        Array.set(arr, 5, "this is a test");
        String s = (String)Array.get(arr, 5);
        System.out.println(s);
     }
     catch (Throwable e) {
        System.err.println(e);
     }
  }
 }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X