2010-02-25 5 views
0

우리는 Java에서 배포해야하는 C# 코드 기반을 가지고 있습니다.Generics, ToArray etc.

우리는 C#을 읽고 Java를 작성하는 마이그레이션 엔진을 만들고 있습니다.

우리 코드에서 사용되는 클래스를 시스템에서 작성하여 구현하고 있습니다.

List<T>을 Java로 만들 때 ToArray을 구현하는 동안 문제가 발생했습니다.

제네릭 측면에서 Java와 C#의 주요 차이점 때문에 제네릭 클래스의 유형을 알 수 없으므로 형식화 된 배열을 만들 수 없습니다.

ToArray을 일반적인 클래스에서 여기 또는 매개 변수로 전달하지 않고 생성자에서 전달하지 않고서도 똑똑한 방법을 알고있는 사람도 있습니다.

+0

이 의미입니까? http : // stackoverflow.com/questions/529085/java-how-to-generic-array-creation – Karussell

+0

배열을'List's로 변환하는 것이 가장 좋습니다. –

답변

0

아마 Grasshopper을보고 다시 작성하지 않아야합니다. 바퀴. MSIL to Java 바이트 코드 컴파일러이며 성숙한 제품입니다.

2

java의 목록에는 계약에 의한 두 개의 toArray() 메소드가 있습니다. Object[]T[]

  • 유형의 주장을 수용하는 방법을 반환

    • 인수가없는 방법.

    ArrayList 구현 이런 후자 보이는

  • ( elementData 목록 역행 배열이다)

    public <T> T[] toArray(T[] a) { 
        if (a.length < size) { 
         // Make a new array of a's runtime type, but my contents: 
         return (T[]) Arrays.copyOf(elementData, size, a.getClass()); 
        } 
        System.arraycopy(elementData, 0, a, 0, size); 
        if (a.length > size) { 
         a[size] = null; 
        } 
        return a; 
    } 
    

    다음과 같이 javadoc 설명되어 전달되는 매개 변수 :

    이리스트의 요소가 저장되고있는 배열. 그렇지 않은 경우는, 같은 실행시의 형태의 새로운 배열이이 목적으로 할당 할 수 있습니다.

    그래서 사용자가 직접 목록을 구현하려는 경우이 접근법을 따르십시오. 즉 적절한 유형의 배열을 미리 만들어 일반적인 방법으로 전달하십시오.

    6

    우리는 C#을 읽고 Java를 작성하는 마이그레이션 엔진을 만들고 있습니다.

    나는이 계획에 원숭이 렌치를 던지는 것을 싫어하지만 이것은 정말로 비참한 생각처럼 들립니다. 당신은 유지하기 어려울 unidiomatic 엉망으로 감을거야. War and Peace을 Google 번역을 통해 실행하는 것과 대략 동일한 의미의 프랑스어 버전을 얻을 것으로 예상됩니다.

    +0

    +1 - '수익률 반환'또는 '.Where' 또는'.Select' 등이있을 경우 생성해야하는 혼란을 상상해보십시오. –

    +0

    특정 사례에서 우리만의 코드를 마이그레이션하려고합니다. 지저분한 수익률 등 ... 우리는 가독성 문제를 아주 잘 알고 있으며 해결하기 위해 노력합니다. 우리는 과거에 아주 성공적으로 해왔으며, 여기에서도 똑같이 할 계획입니다. – Noam

    +1

    @ 노암 : 제한 사항을 알고있는 한 오케이 doke. 그럼에도 불구하고 사람들이 이것이 이것이 일반적으로 좋은 생각이라고 생각하지 않도록 나는 그것을 올려야한다고 생각했습니다. –

    0

    내용을 살펴보고 모든 요소 중에서 가장 구체적인 수퍼 클래스를 찾을 수 있습니다. 물론 선언 된 제네릭 형식보다 구체적 일 수 있으며 빈 목록과 관련하여 흥미로운 질문이 될 수 있습니다 ...

    +0

    흥미로운 아이디어이지만 지정한 경우에는 작동하지 않습니다. – Noam