[java] C ++에 typedef 키워드에 대한 Java 동등 또는 방법이 있습니까?

C 및 C ++ 배경에서 온, 나는 신중하게 사용 typedef하는 것이 엄청나게 도움이된다는 것을 알았습니다 . Java 메커니즘, 패턴 또는 다른 효과적인 방법이든 Java에서 유사한 기능을 수행하는 방법을 알고 있습니까?



답변

Java에는 기본 유형, 객체 및 배열이 있습니다. 타입 정의가 없습니다.


답변

이것이 의미하는 바라면 typedef하려는 클래스를 간단히 확장 할 수 있습니다. 예를 들면 다음과 같습니다.

public class MyMap extends HashMap<String, String> {}


답변

1.6에서 현재 Java에는 typedef가 없으며 최종 클래스 (Integer, Double 등)를 서브 클래스 할 수 없으므로 원하는 래퍼 클래스를 만드는 것이 가능합니다.


답변

다른 사람들이 이전에 언급했듯이
Java에는 typedef 메커니즘이 없습니다.
나는 또한 일반적으로 “가짜 클래스”를 지원하지 않지만 여기에 일반적인 엄격한 규칙이 없어야합니다
.

Map<String, List<Integer>> 

그 목적을 위해 서브 클래스를 갖는 것을 반드시 고려해야합니다.
고려할 수있는 또 다른 접근법은 예를 들어 코드에서 다음과 같은 감속을 갖는 것입니다.

//@Alias Map<String, List<Integer>>  NameToNumbers;

그런 다음 코드에서 NameToNumbers를 사용하고 관련 Java 코드를 처리하고 생성하기위한 사전 컴파일러 태스크 (ANT / Gradle / Maven)가 있어야합니다.
나는이 답변의 독자들에게 이것이 이상하게 들릴지 모른다는 것을 알고 있지만, 이것은 JDK 5 이전에 “어노테이션”을 구현 한 프레임 워크의 수입니다. 이것은 lombok 프로젝트 가 수행하는 작업과 다른 프레임 워크입니다.


답변

실제로 Javaland로 전달되는 typedef의 유일한 사용은 앨리어싱 즉, 같은 클래스에 여러 이름을 부여하는 것입니다. 즉, 클래스 “A”가 있고 “B”가 같은 것을 참조하기를 원합니다. C ++에서는 “typedef BA;”를 수행하게됩니다.

불행히도, 그들은 그것을 지원하지 않습니다. 그러나 관련된 모든 유형을 제어하면 라이브러리 수준에서 불쾌한 해킹을 당길 수 있습니다 .B를 A에서 확장하거나 B가 A를 구현하도록하십시오.


답변

아마도 이것은 또 다른 가능한 교체 일 수 있습니다.

@Data
public class MyMap {
    @Delegate //lombok
    private HashMap<String, String> value;
}


답변

다른 답변에서 언급했듯이 의사 타입 정의 반 패턴을 피해야합니다 . 그러나 typedef는이를 달성 할 수없는 방법이더라도 여전히 유용합니다. 동일한 Java 표현을 가진 다른 추상 유형을 구별하려고합니다. 암호 인 문자열과 주소를 나타내는 문자열 또는 오프셋을 나타내는 정수를 절대 값을 나타내는 문자열과 혼합하지 않으려 고합니다.

검사 프레임 워크는 이전 버전과 호환 방법으로 형식 정의를 정의 할 수 있습니다. 나는 같은 기본 클래스와 같은 int최종 클래스 에서도 작동합니다 String. 런타임 오버 헤드가 없으며 평등 테스트를 중단하지 않습니다.

타입 별칭과 형식 정의 검사기 프레임 워크 설명서는 필요에 따라 형식 정의를 만들 수있는 몇 가지 방법을 설명합니다.