Java에서 가져오기 이름 변경 또는 이름이 같은 클래스 두 개 가져오기
Python에서는 다음 작업을 수행할 수 있다.
from a import b as c
수입품 두 개가 충돌하고 있는데 자바에서는 어떻게 하시겠습니까?
자바에는 수입 앨리어싱 메커니즘이 없다.같은 이름의 클래스를 두 개 가져올 수 없고 두 클래스를 모두 무자격으로 사용할 수 없다.
한 클래스를 가져오고 다른 클래스에 대해 정규화된 이름을 사용하십시오.
import com.text.Formatter;
private Formatter textFormatter;
private com.json.Formatter jsonFormatter;
다른 답변이 이미 언급했듯이, 자바는 이 기능을 제공하지 않는다.
이 기능의 구현은 JDK-4194542: 클래스 이름 앨리어싱 또는 JDK-4214789: 가져온 유형의 이름을 변경할 수 있도록 가져오기 확장 등과 같이 여러 번 요청되었다.
코멘트:
이것은 거의 필수적이지는 않지만 불합리한 요구는 아니다.때때로 완전한 자격을 갖춘 이름을 사용하는 것은 과도한 부담이 아니다(도서관이 정말로 동일한 단순한 이름을 오른쪽과 왼쪽, 즉 나쁜 스타일인 것을 다시 사용하지 않는 한).
어떤 경우에도, 그것은 언어 변화에 대한 가격/성능의 기준을 통과하지 못한다.
그래서 조만간 Java에서는 이 기능을 볼 수 없을 것 같다.-P
그루비가 이런 특징을 가지고 있다는 것은 아마도 주목할 필요가 있을 것이다.
import java.util.Calendar
import com.example.Calendar as MyCalendar
MyCalendar myCalendar = new MyCalendar()
Java는 당신이 그것을 하는 것을 허락하지 않는다.정규화된 이름으로 클래스 중 하나를 참조하고 다른 클래스만 가져오십시오.
오늘 나는 이 별칭 기능에 대한 JEP 초안을 OpenJDK에 제출했다.나는 그들이 그것을 재고하기를 바란다.
관심 있으시면 JEP 초안을 https://gist.github.com/cardil/b29a81efd64a09585076fe00e3d34de7에서 찾아보십시오.
자바에게 아직 이런 게 없다는 건 말도 안 돼.스칼라가 가지고 있다.
import com.text.Formatter
import com.json.{Formatter => JsonFormatter}
val Formatter textFormatter;
val JsonFormatter jsonFormatter;
기본이 아닌 생성자에 문제가 없는 경우 항상 이 작업을 수행할 수 있다(우리 모두는 Java 언어 사양이 따라오기를 기다리는 동안).
public class YaddaYadda
{
private static class ZU extends eu.zrbj.util.ZrbjUtil_3_0 { }
public void foo (String s)
{
if (ZU.isNullOrEmpty(s))
{
// ...
프로젝트 전체에서 '가져오기' 클래스는 가져오기에 대한 단일 정의 지점을 제공하는 별도의 클래스 파일로 들어갈 수 있다.
이것은 특히 정적 효용 함수의 컬렉션을 의미하는 '도서관' 클래스에 관한 생명의 은인이다.한 가지 예로, 사용자가 큰 불편함 없이 이 짐승들을 버전화할 수 있는 능력을 제공한다.
실제로 바로 가기를 만들어 코드에서 다음과 같은 방법으로 짧은 이름을 사용할 수 있다.
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();
}
}
그런 식으로 긴 이름을 한 번만 지정하면 되고, 원하는 만큼 특수하게 명명된 클래스를 가질 수 있다.
이 패턴에 대해 내가 좋아하는 또 다른 점은 구현 클래스를 추상 기본 클래스와 동일하게 지정하고 다른 네임스페이스에 배치하면 된다는 것이다.그러나 그것은 수입/이름 변경 패턴과 관련이 없다.
'programing' 카테고리의 다른 글
Vuex에서 지도 상자 맵에 대한 중앙 집중식 상태를 설정하는 방법 (0) | 2022.05.12 |
---|---|
오류 메시지."Object/Array 타입의 제안서는 기본값을 반환하기 위해 공장 기능을 사용해야 한다." (0) | 2022.05.12 |
부동 소수점 값의 정밀도를 유지하기 위한 폭 지정자 인쇄 (0) | 2022.05.12 |
Vuex - 모듈 상태에 따라 계산된 속성이 디스패치 시 업데이트되지 않는가? (0) | 2022.05.12 |
플러그인용 Vue CLI 3 vue.config.js 대 webpack.config.js (0) | 2022.05.12 |