문제

특정 일반 설명을 계속 반복하지 않고도 일반 정의를 정의하고 사용하는 간단한 방법이 있습니까? 변경 사항이 있는 경우 코드베이스에서 모든 정의/사용법을 변경할 필요는 없습니다. 예를 들어 다음과 같습니다.

Typedef myGenDef = < Object1, Object2 >;

HashMap< myGenDef > hm = new HashMap< myGenDef >();

for (Entry< myGenDef > ent : hm..entrySet())
{
.
.
.
}
도움이 되었습니까?

해결책

거기에 의사 형식 정의 안티패턴...

class StringList extends ArrayList<String> { }

좋은 일이야, 마셔!;-)

기사에서 언급했듯이 이 기술에는 몇 가지 심각한 문제가 있습니다. 주로 이 "typedef"는 실제로 별도의 클래스이므로 확장 유형이나 기타 유사하게 정의된 유형과 상호 교환적으로 사용할 수 없다는 것입니다.

다른 팁

일반적인 방법에서는 제한된 형식의 유형 추론을 사용하여 일부 반복을 피할 수 있습니다.

예:당신이 기능이 있다면

    <K, V> Map<K, V> getSomething() {
        //...
    }

당신이 사용할 수있는:

final Map<String, Object> something = getsomething();

대신에:

final Map<String, Object> something = this.<String, Object>getsomething();

사용 팩토리 패턴 제네릭 생성의 경우:

방법 샘플:

public Map<String, Integer> createGenMap(){
        return new HashMap<String,Integer>();

    }

Shog9에서 언급한 pseudo-typedef 안티패턴은 작동하지만(안티패턴을 사용하는 것은 권장되지 않음) 사용자의 의도를 다루지는 않습니다.pseudo-typedef의 목표는 선언의 혼란을 줄이고 가독성을 높이는 것입니다.

당신이 원하는 것은 한 번의 거래로 제네릭 선언 그룹을 대체할 수 있는 것입니다.나는 당신이 멈춰서 생각해야 한다고 생각합니다:"마녀 방식으로 가치가 있습니까?".내 말은, 이것이 필요한 시나리오를 생각할 수 없다는 것입니다.클래스 A를 상상해 보세요.

class A {
     private Map<String, Integer> values = new HashMap<String, Integer>();
}

이제 '값' 필드를 지도로 변경하고 싶다고 상상해 보세요.동일한 변경이 필요한 코드 전체에 흩어져 있는 다른 많은 필드가 존재하는 이유는 무엇입니까?'값'을 사용하는 작업의 경우 간단한 리팩토링이면 충분합니다.

아니요.하지만 JVM 언어인 groovy는 동적으로 유형이 지정되므로 다음과 같이 작성할 수 있습니다.

def map = new HashMap<complicated generic expression>();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top