ArrayList 객체에 문자열을 추가하려면 어떻게 해야 합니까?
3807 단어 java 집합
package org.danni.reflect_1;
import java.util.ArrayList;
public class ArrayListDemo {
public static void main(String[] args) {
//
ArrayList array = new ArrayList();
array.add(10);
System.out.println(array);
}
}
xJad 역컴파일 파일을 사용하여 컴파일된 class 파일을 열면 다음과 같은 내용의 대응하는 class 바이트 코드 파일을 발견할 수 있습니다.
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: ArrayListDemo.java
package org.danni.reflect_1;
import java.util.ArrayList;
public class ArrayListDemo
{
public ArrayListDemo()
{
}
public static void main(String args[])
{
ArrayList array = new ArrayList();
array.add(Integer.valueOf(10));
System.out.println(array);
}
}
Class 파일에서dd 방법에서 강제 형식 변환이 진행되었음을 알 수 있습니다.Array List의 범주형은 사라졌다.이 범주형은 컴파일러에게만 보이는 것을 알 수 있다.이제 dd () 방법의 원본 코드를 다시 봅시다:dd 방법에서 전달하는 것은 반드시 E 형식이어야 합니다. 즉, 이곳의 Integer 형식입니다.
public boolean add(E e) {
ensureCapacity(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
따라서 우리는 Array List 대상에 문자열을 삽입하려면 그의class 바이트 파일을 얻으면 된다고 생각할 수 있다. 바이트 파일에서dd 방법에서 강제 형식 변환이 이루어졌기 때문에 우리는 어떤 종류의 매개 변수를 전달해도 된다.class 바이트 파일을 얻으려면 반사를 사용해야 한다는 생각이 자연스레 떠올랐다. 이 문제의 해결 답은 다음과 같다.
public class ArrayListDemo {
public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
//
ArrayList array = new ArrayList();
// array , Class
Class c = array.getClass();
// :( , class)
//add(E e) : E, Object
Method m = c.getMethod("add", Object.class);
m.invoke(array, " "); // array add ,
m.invoke(array, " ");
System.out.println(array);
}
}
출력:
[ , ]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ArrayList 객체에 문자열을 추가하려면 어떻게 해야 합니까?다음과 같이 자바 파일을 작성합니다. xJad 역컴파일 파일을 사용하여 컴파일된 class 파일을 열면 다음과 같은 내용의 대응하는 class 바이트 코드 파일을 발견할 수 있습니다. Class 파일에서dd 방법에서...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.