자바 범형의 작용과 그 기본 개념을 간단히 말하다
java는 c#와 마찬가지로 범용 개념과 유형의 매개 변수화가 존재한다.자바의 범주형은 jdk5.0 이후에 나타났지만 자바의 범주형은 C#의 범주형과 본질적인 차이가 있다. 먼저 집합 유형에서 말하자면 자바의 ArrayList
java에서 범용적인 도입은 주로 두 가지 측면의 문제를 해결하기 위한 것이다. 1.집합 유형 요소는 운행 기간에 유형 교체 이상이 발생하고 컴파일할 때 유형 검사를 증가합니다. 2.해결할 때 중복 코드의 작성은 알고리즘을 복용할 수 있다.다음은 예를 통해 컴파일러의 유형 검사를 설명합니다.
우선 우리는 범용형을 사용하지 않은 예를 하나 본다.
ArrayList al = new ArrayList();
al.add("abc");
al.add("124");
al.add("32L");
우리는 알 집합에 어떤 종류의 데이터를 추가할 수 있다.데이터를 추출할 때 다음과 같은 유형 변환이 필요합니다.
String s = (String)al.get(0);
String s1 = (String)al.get(1); // , ,
Long l = (Long)al.get(2);
이를 통해 알 수 있듯이 범용이 없을 때 컴파일할 때의 유형 검사를 줄이고 원소를 꺼낼 때 프로그래머가 모든 원소의 유형에 대해 알아야 한다. 그렇지 않으면 실행할 때 유형 전환의 이상이 발생할 수 있다.그럼 다음은 범용 집합을 통해 그가 우리에게 가져다 준 이익을 살펴보자.
ArrayList<String> al1 = new ArrayList<String>();
al1.add("abc");
al1.add(1); // ,
String 매개 변수 형식으로al1을 실례화한 후에 int 요소를 추가할 수 없습니다. 그렇지 않으면 컴파일러가 오류를 보고합니다. 보통 IDE 편집기, 예를 들어 eclipse에 오류 표시가 있을 뿐만 아니라 요소를 꺼내도 형식 변환이 필요하지 않습니다.
string value = al1.get(0); //
이것이 바로 범형이 가져온 장점이다.그러면 알고리즘의 복용은 주로 방법의 복용, 예를 들어 ArrayList의Add 방법은 어떤 유형이나 한정된 유형에 사용할 수 있다는 데 나타난다.
2. 범용 사용
java의 범주형은 주로 클래스, 방법, 인터페이스에 사용된다.우선, 우리는 클래스에서의 사용을 간단하게 살펴보자.
class Factory<T>{
private T value;
public T getValue()
{
return value;
}
public void setValue(T v)
{
this.value = v;
}
}
테스트 방법 추가:
Factory<String> f = new Factory<String>();
f.setValue("factory in use");
System.out.println(f.getValue());
범용 인터페이스 사용:
interface MyInterface<T,U>{
void show(T t, U u);
}
class ShowTest implements MyInterface<String,Integer>{
@Override
public void show(String t, Integer u) {
System.out.println(t);
System.out.println(u);
}
}
범용 유형 매개 변수가 클래스에 작용할 때 주로 여러 필드와 방법 서명 간의 유형 제약이 있다.방법에 작용할 때 주로 방법의 여러 파라미터에 대해 상응하는 제약을 한다. 여기서 방법의 범용 유형 파라미터는 더 이상 예를 들지 않는다. 다음에 우리는 주로 유형 파라미터의 제약을 소개한다.3. 유형 매개 변수 제약
다음 코드와 같은 작은 예를 살펴보겠습니다.
public static <T> T get(T t1,T t2) {
if(t1.compareTo(t2)>=0);// ,the method compareTo(T) is undefined for the type T.
return t1;
}
컴파일러가 잘못 보고한 정보를 볼 수 있습니다. 유형 T에 대해compareTo 방법을 정의하지 않았습니다. 자바에서 유형을 비교해야 하면Comparable 인터페이스를 실현하여 이 방법을 다시 써야 합니다.그러면 다음과 같이 수정합니다.
public static <T extends Comparable> T get(T t1,T t2) { //
if(t1.compareTo(t2)>=0);
return t1;
}
한정 T extends Comparable를 통해 T는 Comparable의 인터페이스를 실현하는 유형이기 때문에compareTo 방법도 실현되었기 때문에 컴파일링 오류가 발생하지 않습니다.유형이 여러 개 한정될 때 우리는 & 를 사용하여 분할할 수 있으며, 한정된 키워드는 extends만 사용할 수 있다.이와 동시에 인터페이스와 유형이 모두 존재하는 상황에서 클래스는 첫 번째에 놓을 수 있고 다음과 같은 하나만 있을 수 있다.
<T extends Object&Comparable&Serializable>
이상의 자바 범형의 역할과 그 기본 개념은 바로 편집자가 여러분에게 공유한 모든 내용입니다. 여러분께 참고가 되고 저희를 많이 사랑해 주시기 바랍니다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.