잡동사니

반응형

질문

저는 현재 Java를 공부하고 있으며 최근에 꺾쇠 괄호 (< >)로 인해 어려움을 겪고 있습니다. 정확히 무엇을 의미합니까?

public class Pool<T>{
    public interface PoolFactory<T>{
        public T createObject();
    }
    this.freeObjects = new ArrayList<T>(maxsize)
}

< T > 는 무엇을 의미합니까? T유형의 객체를 만들 수 있다는 의미입니까?


답변1

< T > 일반이며 일반적으로 "T 유형"으로 읽을 수 있습니다. 실제로 의미하는 바는 < > 왼쪽에있는 유형에 따라 다릅니다.

Pool또는 PoolFactory 가 무엇인지 모르겠지만 ArrayList < T > 도 언급합니다. 표준 Java class이므로 이에 대해 이야기하겠습니다.

일반적으로 거기에 "T"가 표시되지 않고 다른 유형이 표시됩니다. 예를 들어 ArrayList < Integer > 가 표시되면 "Integer ArrayList "를 의미합니다. 예를 들어 많은 class는 제네릭을 사용하여 container의 요소 유형을 제한합니다. 또 다른 예는 HashMap < String, Integer > 이며, 이는 "String키와 Integer값이있는 맵"을 의미합니다.

풀 예제는 class를 정의하고 있기 때문에 약간 다릅니다. 따라서이 경우 다른 사람이 T 대신 특정 유형으로 인스턴스화 할 수있는 class를 생성하고 있습니다. 예를 들어 Pool < String > class 정의 사용. 이는 두 가지를 의미합니다.

  • Pool < String > 에는 createObject메소드가있는 PoolFactory < String >인터페이스가 있습니다. String 을 반환합니다.
  • 내부적으로 Pool < String > 은 문자열의 ArrayList 를 포함합니다.

이것은 좋은 소식입니다. 왜냐하면 다른 시간에 같은 코드를 사용하지만 Integer Pool < Integer > 를 만들 수 있기 때문입니다. > 소스에서 T 를 볼 수 있습니다.



답변2

정말 간단합니다. J2SE 5 에 도입 된 새로운 기능입니다. class 이름 뒤에 꺾쇠 괄호를 지정하면 모든 유형의 데이터를 보유 할 수있는 임시 데이터 유형을 생성한다는 의미입니다.

예:

class A<T>{
    T obj;
    void add(T obj){
        this.obj=obj;
    }
    T get(){
        return obj;
    }
}
public class generics {
    static<E> void print(E[] elements){
        for(E element:elements){
            System.out.println(element);
        }
    }

    public static void main(String[] args) {
        A<String> obj=new A<String>();
        A<Integer> obj1=new A<Integer>();
        obj.add("hello");
        obj1.add(6);
        System.out.println(obj.get());
        System.out.println(obj1.get());

        Integer[] arr={1,3,5,7};
        print(arr);
    }
}

< T >대신 실제로 무엇이든 작성할 수 있으며 동일한 방식으로 작동합니다. < T >대신 < ABC > 를 작성해보세요.

이것은 단지 편의를위한 것입니다.

  • < T > 는 모든 유형으로 참조됩니다.
  • < E >요소 유형
  • 숫자 유형으로 < N >
  • < V >
  • < K >

하지만 원하는대로 이름을 지정할 수 있습니다. 그다지 중요하지 않습니다.

또한 Integer , String , Boolean등은 컴파일 중에 유형을 확인하는 데 도움이되는 Java의 래퍼 class입니다. 예를 들어, 위 코드에서 obj String유형이므로 다른 유형을 추가 할 수 없습니다 (obj.add (1) 시도). , 오류가 발생합니다). 마찬가지로 obj1 Integer유형이므로 다른 유형을 추가 할 수 없습니다 (obj1.add ( "hello")시도). , 오류가있을 것입니다).



답변3

Java의 제네릭과 관련이 있습니다. ArrayList < String > 을 언급했다면 해당 ArrayList에 String 유형 객체 만 추가 할 수 있다는 의미입니다.

자바에서 제네릭의 두 가지 주요 이점은 다음과 같습니다.

  1. 프로그램의 캐스트 수를 줄임으로써 프로그램의 잠재적 버그 수를 줄입니다.
  2. 코드 명확성 향상


답변4

일반 유형이라고합니다. 다음과 같이 객체 풀을 인스턴스화 할 수 있습니다.

PoolFactory<Integer> pool = new Pool<Integer>();

일반 매개 변수는 참조 유형 만 될 수 있습니다. 따라서 int, double 또는 char 또는 기타 기본 유형과 같은 기본 유형을 사용할 수 없습니다.



답변5

< > 제네릭 .

이 예에서 T 는 유형 매개 변수입니다. 그리고 아니요 : 인스턴스화는 T 로 할 수 할 수없는 몇 안되는 작업 중 하나입니다.

위에 링크 된 자습서 외에 Angelika Langers Generics FAQ 는 주제에 대한 훌륭한 리소스입니다.



답변6

제네릭 class는 생성시 데이터 유형을 매개 변수로 사용하는 class 유형입니다. 이 유형 매개 변수는 꺾쇠 괄호를 사용하여 지정되며 유형은 class의 새 인스턴스가 인스턴스화 될 때마다 변경 될 수 있습니다. 예를 들어, Employee 객체에 대한 ArrayList와 Company 객체에 대한 다른 하나를 만들어 보겠습니다.

ArrayList<Employee> employees = new ArrayList<Employee>();
ArrayList<Company> companies = new ArrayList<Company>();

동일한 ArrayList class를 사용하여 두 목록을 모두 만들고 꺾쇠 괄호를 사용하여 Employee 또는 Company 유형을 전달하는 것을 알 수 있습니다. 하나의 일반 class가 여러 유형의 데이터를 처리 할 수 있으면 유사한 작업을 수행하는 많은 class가 줄어 듭니다.Generics는 또한 컴파일러가 오류를 지적하는 데 도움이되는 강력한 유형을 모든 것에 제공하여 버그를 줄이는 데 도움이됩니다. ArrayList에 대한 유형을 지정하면 Employee를 Company 목록에 추가하려고하거나 그 반대의 경우에도 컴파일러에서 오류가 발생합니다.



 

 

 

 

출처 : https://stackoverflow.com/questions/6607550/what-does-t-angle-brackets-mean-in-java

반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band