2011-05-06 3 views
0

배열을 포함하는 개체가 있지만 배열의 형식이 매번 다를 수 있습니다.우리는 어떻게 Java의 제네릭 형식과 프리미티브로 작업 할 수 있습니까?

내가

class MyObject<T> 
{ 
    public T [] data; 
} 

같은 것을 할 수있는 것은이 원시 형 작동하지 않습니다 (더블 INT, ...) 그리고 그것은 나를 개체 (정수, 이중 작업을하게한다는 것입니다 ...).

이 문제를 방지 할 수있는 방법이 있습니까? adavnce

답변

2

에서

덕분에 당신은 autoboxing in Java은 당신이 찾고있는 정확하게 할 수 있다는 것을 알고 있어야합니다. 링크에서이 코드 예제를 참조하십시오

// List adapter for primitive int array 
public static List<Integer> asList(final int[] a) { 
    return new AbstractList<Integer>() { 
     public Integer get(int i) { return a[i]; } 
     // Throws NullPointerException if val == null 
     public Integer set(int i, Integer val) { 
      Integer oldVal = a[i]; 
      a[i] = val; 
      return oldVal; 
     } 
     public int size() { return a.length; } 
    }; 
} 

get() 그 방법은 자동으로 Integer로 변환 일반 오래된 데이터 형식 int을 반환합니다. 마찬가지로 set() 메서드는 Integer을 사용하고 배열에 요소를 할당합니다.

자동 보봇 (Autoboxing)은 즉각적인 특징은 아니지만 자동 개체 생성을 처리합니다.

1

템플릿과 함께 C++에서와 같이 generics에서 기본 함수를 사용할 수 없습니다.

프리미티브를 사용하는 컬렉션을 원할 경우 http://trove.starlight-systems.com/을 참조하십시오.이 컬렉션 유형을 제네릭의 일부로 전달할 수 있습니다. 즉, 기본 유형을 전달하는 대신 콜렉션 유형을 전달하십시오.

MyObject<List<String>> containsStrings = ... 
MyObject<TIntArrayList> contains_ints = ... 
+1

+1. 훌륭한 도서관! –

0

이것은 불가능합니다. 원시 배열을 해당 OO에 해당하는 것으로 변환하십시오.

관련 문제