질문
저는 현재 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 유형 객체 만 추가 할 수 있다는 의미입니다.
자바에서 제네릭의 두 가지 주요 이점은 다음과 같습니다.
- 프로그램의 캐스트 수를 줄임으로써 프로그램의 잠재적 버그 수를 줄입니다.
- 코드 명확성 향상
답변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