파이썬에서 당신은 할 수 있습니다 :
from a import b as c
충돌하는 두 가지 가져 오기가 있으므로 Java에서 어떻게해야합니까?
답변
Java에는 가져 오기 앨리어싱 메커니즘이 없습니다. 동일한 이름을 가진 두 개의 클래스를 가져올 수 없으며 둘 다 규정되지 않은 상태로 사용할 수 있습니다.
한 클래스를 가져오고 다른 클래스의 정규화 된 이름을 사용하십시오.
import com.text.Formatter;
private Formatter textFormatter;
private com.json.Formatter jsonFormatter;
답변
다른 답변에서 이미 언급했듯이 Java는이 기능을 제공하지 않습니다.
이 기능의 구현은 JDK-4194542 : 클래스 이름 앨리어싱 또는 JDK-4214789 : 가져온 유형의 이름을 바꿀 수 있도록 가져 오기 확장 과 같이 여러 번 요청되었습니다 .
의견에서 :
거의 필수는 아니지만, 이것은 비합리적인 요청이 아닙니다. 정규화 된 이름을 가끔 사용하는 것은 과도한 부담이 아닙니다 (라이브러리가 실제로 동일한 단순한 이름을 오른쪽과 왼쪽으로 재사용하지 않는 한 나쁜 스타일입니다).
어쨌든 언어 변경에 대한 가격 / 성능 기준을 통과하지 못합니다.
그래서 우리는 Java 에서이 기능을 곧 볼 수 없을 것입니다 😛
답변
Groovy에이 기능이 있다는 점에 주목할 가치가 있습니다 .
import java.util.Calendar
import com.example.Calendar as MyCalendar
MyCalendar myCalendar = new MyCalendar()
답변
Java는 그렇게 할 수 없습니다. 정규화 된 이름으로 클래스 중 하나를 참조하고 다른 클래스 만 가져와야합니다.
답변
오늘 저는이 앨리어싱 기능에 대해 JEP 초안을 OpenJDK에 제출했습니다. 나는 그들이 그것을 재고하기를 바랍니다.
관심이 있으시면 여기에서 JEP 초안을 찾을 수 있습니다 : https://gist.github.com/cardil/b29a81efd64a09585076fe00e3d34de7
답변
실제로 다음과 같은 방법으로 코드에서 짧은 이름을 사용할 수 있도록 바로 가기를 만들 수 있습니다.
package com.mycompany.installer;
public abstract class ConfigurationReader {
private static class Implementation extends com.mycompany.installer.implementation.ConfigurationReader {}
public abstract String getLoaderVirtualClassPath();
public static QueryServiceConfigurationReader getInstance() {
return new Implementation();
}
}
그런 식으로 긴 이름을 한 번만 지정하면되며 원하는만큼 이름이 지정된 클래스를 가질 수 있습니다.
이 패턴에 대해 좋아하는 또 다른 점은 구현 클래스의 이름을 추상 기본 클래스와 동일하게 지정하고 다른 네임 스페이스에 배치 할 수 있다는 것입니다. 그러나 가져 오기 / 이름 바꾸기 패턴과는 관련이 없습니다.