programing

Java에서 가져오기 이름 변경 또는 이름이 같은 클래스 두 개 가져오기

prostudy 2022. 5. 12. 21:55
반응형

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();
    }
}

그런 식으로 긴 이름을 한 번만 지정하면 되고, 원하는 만큼 특수하게 명명된 클래스를 가질 수 있다.

이 패턴에 대해 내가 좋아하는 또 다른 점은 구현 클래스를 추상 기본 클래스와 동일하게 지정하고 다른 네임스페이스에 배치하면 된다는 것이다.그러나 그것은 수입/이름 변경 패턴과 관련이 없다.

참조URL: https://stackoverflow.com/questions/2447880/change-name-of-import-in-java-or-import-two-classes-with-the-same-name

반응형