2017-03-10 1 views
0

두 개의 임의의 배열을 인수로 취해 생성자를 통해 두 개의 비공개 필드 K []와 V []와 동일한 클래스 ZipIterator의 인스턴스를 만들려고합니다. 내 테스트 클래스의 메인 메소드의 주요 방법, 내 테스트 클래스에서두 가지 일반 유형으로 클래스의 인스턴스를 만드는 방법은 무엇입니까?

import java.util.Iterator; 

public class ZipIterator<K,V> 
{ 
    private K[] arr1; 
    private V[] arr2; 
    private int pos = 0; 

    public ZipIterator(K[] arr1, V[] arr2) { 
     this.arr1 = arr1; 
     this.arr2 = arr2; 
    } 

} 

을 쓰고 있어요 ',이

int[] arr1 = {1,5,3,1,6}; 
double[] arr2 = {2.3,42.1,1.6,6.43}; 
ZipIterator<int[],double[]> zip = new ZipIterator<int[],double[]>(arr1,arr2); 

같은 ZipIterator 개체를 만들려고 해요하지만 난 점점 계속 오류 :

error: incompatible types: int[] cannot be converted to int[][] 

내가 뭘 잘못하고 있는지 확실하지 않습니다. 아무도 도울 수 있다면, 크게 감사하겠습니다!

+1

제네릭과 함께 기본 유형을 사용할 수 없습니다. 'Integer'와'Double' 래퍼 타입을 사용하십시오. – 4castle

+1

'K'를'int []'로 설정하면 생성자는'int [] []'이 될'K []'를 기대합니다. –

답변

-1

Kint[]Vdouble[]입니다 때 ZipIterator<int,double> zip = new ZipIterator<int,double>(arr1,arr2);

+0

이것은 컴파일되지 않습니다. – 4castle

1

ZipIterator<K[], V[]>의 서명에 대해 생각해야한다.

인스턴스화해야 할 것은 ZipIterator<Integer, Double>입니다. 원시 형으로 클래스를 매개 변수화 할 수 없습니다.

예, 복싱/언 박싱으로 인해 비효율적입니다. 더 높은 성능을 원한다면 기본 유형의 배열을 인스턴스 변수로 유지하는 래퍼 클래스를 만드십시오. 그래도 멋지게 만들려면 까다로울 것입니다.

-1

사용 래퍼 클래스

Integer[] arr1 = {1,5,3,1,6}; 
Double[] arr2 = {2.3,42.1,1.6,6.43}; 
ZipIterator<Integer,Double> zip = new ZipIterator<>(arr1,arr2); 

편집

+0

왜 아래로 투표합니까? – rpfun12

1

봐 4castle @로 의견에 따라 내 대답은 밀접하게 무슨 일이 발생합니다

당신은 제네릭 형식 K으로 int[]를 사용하는

:

ZipIterator<int[], double[]> zip = new ZipIterator<int[],double[]>(arr1, arr2); 

귀하의 구성 또는, 그러나, K의 배열을 받고있다, 그래서 int[]의 배열 int[][]를 필요로 :

public ZipIterator(K[] arr1, V[] arr2) { ... } 

메모 :

  • 당신은 제네릭과 배열을 사용하지 말아야합니다 대신 인터페이스를 사용하십시오.

    public ZipIterator(List<K> arr1, List<V> arr2) { ... } 
    

    또는 4castle mentioned처럼 Iterable 인터페이스를 사용할 수도 있습니다.

  • 다른 사람들이 말한 것과 달리 배열은 원시 유형의 배열 인 경우에도 항상 객체입니다. 따라서 int[]K으로 사용하는 것은 완전히 유효하며, int은 그렇지 않습니다.

+1

이 경우 그들은 아마도'List' 대신'Iterable'을 사용할 수도 있습니다 – 4castle

관련 문제