> Java > java지도 시간 > 본문

java - 일반 매개변수 유형으로 배열 구성

黄舟
풀어 주다: 2017-03-01 11:44:04
원래의
1972명이 탐색했습니다.


얼마 전 코딩을 하다가 갑자기 문제가 생각났습니다. 일반적으로 배열은 매개변수로 메소드에 전달됩니다. 메소드에서 배열을 생성하려면 어떻게 해야 합니까? 유형이 명확하면 어렵지 않습니다. 우리가 전달하는 매개변수가 일반 유형의 매개변수라면 어떻게 될까요?

public static <T> T[]  creArray (T obj){
        T[] arr = new T[10];
}
로그인 후 복사
로그인 후 복사

T를 사용하여 새 배열을 직접 생성하는 위의 방법은 잘못되었으며, 컴파일 중에 오류가 나타납니다. Cannot create a generic array of T.. Java는 알 수 없는 유형의 배열을 직접 생성하는 것을 지원하지 않습니다.

드디어 완벽한 솔루션을 얻었습니다.

package Test;import java.lang.reflect.Array;/**
 * 
 * @author QuinnNorris
 * 在泛型方法中创建泛型类型的数组
 */public class Test {
    public static void main(String[] args) {        // TODO Auto-generated method stub

        String a = "ccc";//创建一个String,作为泛型类型
        String[] ar = creArray(a);        for(String art :ar)//循环打印
            System.out.println(art);
    }    //泛型静态方法
    public static <T> T[]  creArray (T obj){
        T[] arr = (T[])Array.newInstance(obj.getClass(), 5);
        arr[1] = obj;
        System.out.println(arr[1]);        return arr;
    }
}
로그인 후 복사
로그인 후 복사

코드 출력은 다음과 같습니다.

ccc    //方法中输出的arr[1] 

  null    //以下5个是main中循环迭代出的数组值 

  ccc 

  null 

  null 

  null
로그인 후 복사
로그인 후 복사


위의 방법은 완전히 가능합니다. Array 클래스의 newInstance 메서드를 사용하여 지정 가능한 유형의 배열을 구성합니다. 이 작업을 수행하려면 리플렉션을 사용하는 것도 합리적이어야 합니다. 일반 유형 T는 런타임에만 결정될 수 있으므로 Java 런타임에서 일반 배열을 생성하는 방법을 찾아야 합니다. Java 런타임에서 작동하는 유일한 기술은 리플렉션입니다.

Null도 봤습니다. Java에서 다양한 유형의 배열 초기화 값을 정렬하고 싶습니다.

  1. 기본 유형(숫자 유형) ): 0

  2. 기본 유형(Boolean 유형): false

  3. 기본 유형(char 유형): (char) 0

  4. 객체 유형: null

얼마 전 코딩을 하다가 갑자기 문제가 생겼습니다. 일반적으로 배열은 매개변수로 메소드에 전달됩니다. 메소드에서 배열을 생성하려면 어떻게 해야 합니까? 유형이 명확하면 어렵지 않습니다. 우리가 전달하는 매개변수가 일반 유형의 매개변수라면 어떻게 될까요?

public static <T> T[]  creArray (T obj){
        T[] arr = new T[10];
}
로그인 후 복사
로그인 후 복사

T를 사용하여 새 배열을 직접 생성하는 위의 방법은 잘못되었으며, 컴파일 중에 오류가 나타납니다. Cannot create a generic array of T.. Java는 알 수 없는 유형의 배열을 직접 생성하는 것을 지원하지 않습니다.

드디어 완벽한 솔루션을 얻었습니다.

package Test;import java.lang.reflect.Array;/**
 * 
 * @author QuinnNorris
 * 在泛型方法中创建泛型类型的数组
 */public class Test {
    public static void main(String[] args) {        // TODO Auto-generated method stub

        String a = "ccc";//创建一个String,作为泛型类型
        String[] ar = creArray(a);        for(String art :ar)//循环打印
            System.out.println(art);
    }    //泛型静态方法
    public static <T> T[]  creArray (T obj){
        T[] arr = (T[])Array.newInstance(obj.getClass(), 5);
        arr[1] = obj;
        System.out.println(arr[1]);        return arr;
    }
}
로그인 후 복사
로그인 후 복사

코드 출력은 다음과 같습니다.

ccc    //方法中输出的arr[1] 

  null    //以下5个是main中循环迭代出的数组值 

  ccc 

  null 

  null 

  null
로그인 후 복사
로그인 후 복사


위의 방법은 완전히 가능합니다. Array 클래스의 newInstance 메서드를 사용하여 지정 가능한 유형의 배열을 구성합니다. 이 작업을 수행하려면 리플렉션을 사용하는 것도 합리적이어야 합니다. 일반 유형 T는 런타임에만 결정될 수 있으므로 Java 런타임에서 일반 배열을 생성하는 방법을 찾아야 합니다. Java 런타임에서 작동하는 유일한 기술은 리플렉션입니다.

Null도 봤습니다. Java에서 다양한 유형의 배열 초기화 값을 정렬하고 싶습니다.

  1. 기본 유형(숫자 유형) ): 0

  2. 기본 유형(Boolean 유형): false

  3. 기본 유형(char 유형): (char) 0

  4. 객체 유형: nul

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿