JDK 10 새로운 특성의 var 범 형 과 여러 인터페이스 실현 방법
JDK 10 의 새로운 기능:로 컬 변수 형식 var에서 우 리 는 왜 var 를 사용 하고 var 를 어떻게 사용 하 는 지 에 대해 이야기 했다.
오늘 우 리 는 var 와 범 형,여러 개의 인터페이스 가 실현 되 는 문 제 를 깊이 고려 해 보 자.
다 중 인터페이스 구현
JDK 의 실현 과 우리 의 일상적인 업무 에서 여러 개의 인 터 페 이 스 를 실현 해 야 할 때 가 많 습 니 다.우 리 는 자주 사용 하 는 두 가지 예 를 들 어 Array List 와 Copy On Write Array List 를 들 었 습 니 다.먼저 그들의 정 의 를 살 펴 보 자.
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
public class CopyOnWriteArrayList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
우 리 는 Array List 와 CopyOn Write Array List 가 모두 List,RandomAccess,Cloneable,Serializable 이라는 네 개의 인 터 페 이 스 를 실현 한 것 을 볼 수 있다.만약 우리 에 게 Array List creater 가 있다 면,Array List 나 CopyOn Write Array List 중 하 나 를 만 들 수 있 습 니 다.코드 는 어떻게 써 야 합 니까?
public Object createList(boolean flag){
if(flag){
return new ArrayList<>();
}else{
return new CopyOnWriteArrayList<>();
}
}
돌아 오 는 값 은 Array List 일 수도 있 고 CopyOn Write Array List 일 수도 있 기 때문에 돌아 올 대상 을 Object 로 대체 할 수 밖 에 없습니다.오 브 젝 트 로 돌아 가면 범 형 이 가 져 다 주 는 장점 이 없다.돌아 갈 대상 이 어떤 유형 인지 알 수 있 는 방법 은 없 을 까?
여러분 이 가장 먼저 생각 하 는 것 은 아마도 새로운 인 터 페 이 스 를 만 들 고 List,RandomAccess,Cloneable,java.io.Serializable 을 계승 한 다음 에 createList 는 새로 만 든 인 터 페 이 스 를 되 돌려 주면 됩 니 다.
public interface ListInterface<E>
extends List<E>, RandomAccess, Cloneable,
java.io.Serializable
{
}
그리고 createList 방법 을 고 쳐 씁 니 다.
public <E> ListInterface<E> createListWithInterface(boolean flag)
{
if(flag){
return (ListInterface<E>) new ArrayList<E>();
}else{
return (ListInterface<E>) new CopyOnWriteArrayList<E>();
}
}
새로운 방법 은 범 형 을 띠 고 돌아 갈 것 이 ListInterface 라 는 것 을 명확 하 게 밝 혔 다.새로 생 성 된 ListInterface 는 자신의 코드 에서 사용 하 는 데 문제 가 없습니다.만약 당신 의 코드 가 다른 사람 에 게 인용 되 거나 공공 라 이브 러 리 로 서 다른 사람 에 게 사용 된다 면 제3 자 는 당신 이 새로 만 든 ListInterface 가 무엇 을 하 는 지 전혀 모 를 것 입 니 다.
우 리 는 더욱 직관 적 인 방법 으로 List 를 만 들 수 있 습 니까?답 은 당연히 가능 하 다.아래 의 예 를 보 자.
public <T extends List<E> & RandomAccess & Cloneable & java.io.Serializable, E>
T createListWithInterfaceT(boolean flag){
if(flag){
return (T) new ArrayList<E>();
}else{
return (T) new CopyOnWriteArrayList<E>();
}
}
위의 예 에서 우 리 는 범 형 T 를 사용 하여 4 개의 인 터 페 이 스 를 동시에 계승 했다.그리고 만 든 List 를 T 로 변환 합 니 다.이렇게 해서 우 리 는 Array List 와 CopyOn Write Array List 의 공공 형식 을 얻 었 고 새로운 인 터 페 이 스 를 만 들 필요 가 없습니다.
다 중 인터페이스 사용
위 에서 우 리 는 여러 개의 인 터 페 이 스 를 실현 하 는 범 형 T 를 만 들 었 다.그럼 이 걸 사용 하려 면 어떻게 해 야 하나 요?
public <T extends List<E> & RandomAccess & Cloneable & java.io.Serializable, E>
void useGenericityType(){
VarGenericity varGenericity=new VarGenericity();
T list=varGenericity.createListWithInterfaceT(true);
}
방법 내부 에서 T 를 사용 하기 위해 서 우 리 는 방법 정의 에 T 의 정 의 를 다시 한 번 설명해 야 한다.이렇게 하면 비록 우리 의 기능 을 실현 할 수 있 지만,정말 너무 번거롭다.
var 사용
이 럴 때 var 변 수 를 사용 하여 대체 할 수 있 습 니 다.다음 의 예 를 보 겠 습 니 다.
public void useVarInGenericityType(){
VarGenericity varGenericity=new VarGenericity();
var list=varGenericity.createListWithInterfaceT(true);
}
간단 하지 않 습 니까?그리고 var list 변 수 는 네 개의 인터페이스의 모든 공공 방법 을 보류 합 니 다.총결산
본 고 는 범 형 이 여러 인터페이스 실현 에서 의 구체 적 인 예 를 소개 하고 var 를 사용 하여 코드 를 간소화 했다.
본문의 예[https://github.com/ddean2009/
learn-java-base-9-to-20]( https://github.com/ddean2009/ ...
JDK 10 의 새로운 특성 인 var 범 형 과 여러 개의 인터페이스 구현 방법 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 JDK 10 var 범 형 과 여러 개의 인터페이스 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!