2013-01-31 3 views
1

배열을 가져 와서 크기가 같고 내용이 같은 다른 배열을 반환하는 메소드를 작성하려고합니다. 그러나 런타임까지 알 수없는 배열 유형을 할당하는 방법이 필요합니다. 예 :런타임까지 알 수없는 유형의 객체에 객체를 할당하십시오.

전달할 배열은 런타임까지 알 수 없습니다. 어떤 도움을 주셔서 감사합니다.

PS 배열 크기를 관리하는 것이 ArrayLists 등을 통해 수행 될 수 있다는 것을 알고 있습니다. 그러나 이러한 목적으로 배열을 유지하는 것이 좋습니다. 당신은 일반적인 배열 할 수있는 일

+1

런타임에 유형이 어떻게 결정됩니까? – cowls

+0

List.toarray 구현은 힌트 일 수 있습니다 – Scorpion

+0

왜 유형으로 Object []를 사용할 수 없습니까? – wxkevin

답변

3

public static <A> A doubleArray(A array) { 
    int length = Array.getLength(array); 
    Class<?> componentType = array.getClass().getComponentType(); 
    A copy = (A) Array.newInstance(componentType, length * 2); 
    System.arraycopy(array, 0, copy, 0, length); 
    return copy; 
} 

주 :이 원시적 배열을 포함하여 모든 배열에 대해 작동합니다.

int[] ints = doubleArray(new int[4]); 
String[] strings = doubleArray("a,b,c,d,e,f".split(",")); 
+0

고마워. 이것은 좋은 해결책처럼 보입니다. 나는 코드의 일부분을 설명 할 수 있을지 궁금해서 자바 초보자입니까? 과 클래스 <>는 무엇을 의미합니까? 다시 한번 감사드립니다. –

0

피터 Lawrey의 대답 변형, 당신은 오랫동안이 작업을 수행하면 (byte[] 같은 원시적 인 수치 형의 일부 반대) 당신은 어떤 참조 형의 배열 상대하고있는 것을 알 것입니다 수있는 것처럼 :

public static Object[] doubleArray(Object[] array) { 
    Object[] ret = (Object[])Array.newInstance(src.getClass().getComponentType(), src.length * 2); 
    System.arraycopy(src, 0, ret, 0, src.length); 
    return(ret); 
} 

확인되지 않은 제네릭 캐스트가 포함되어 있지 않으므로 아무런 경고도 생성되지 않습니다.

관련 문제