Prüfen Sie, ob java.lang.reflektieren.Feld Typ ist ein byte-array
Ich nicht viel tun, von Reflexion, so dass diese Frage mag offensichtlich sein. Z.B. habe ich eine Klasse:
public class Document {
private String someStr;
private byte[] contents;
//Getters and setters
}
Ich versuche zu prüfen, ob das Feld contents
ist eine Instanz der ByteArray. Was habe ich versucht:
Class clazz = Document.class;
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (field.getType().isArray()) {
Object array = field.getType();
System.out.println(array);
}
}
Die Ausgabe dieses Codes ist: class [B
. Ich sehe, dass byte-array gefunden wird, aber wenn ich das Tue:
if (array instanceof byte[]) {...}
Diese Bedingung ist nie true
. Warum ist das so? Und wie um zu überprüfen, ob das Objekt enthält Felder, die den Typ der byte[]
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
array instanceof byte[]
überprüft, obarray
ist ein Objekt vom Typbyte[]
. Aber in deinem Fallarray
ist nicht einbyte[]
, es ist ein Objekt von TypClass
darstelltbyte[]
.Können Sie auf eine
Class
darstellt, die irgendeine ArtT
alsT.class
daher müssen Sie die folgenden check:wenn das array in einer Klasse nur
instanceof Class
werden wahr..Wenn Sie wollen, überprüfen Sie den Typ des Feldes, das Sie verwenden können,
Versuchen Sie dies:
Sehen dieses nützliche tutorial von Oracle
Wenn Sie versuchen:
druckt es
byte[]
. Aber @axtavt Antwort ist besser.