[java] 이름이 같은 두 개의 클래스를 가져옵니다. 처리하는 방법?

다음과 같은 코드가 있다고 가정합니다.

import java.util.Date;
import my.own.Date;

class Test{

  public static void main(String [] args){

    // I want to choose my.own.Date here. How?
    ..
    // I want to choose util.Date here. How ?

  }
}

정규화 된 클래스 이름이어야합니까? 수입 명세서를 제거 할 수 있습니까? 이러한 시나리오가 실제 프로그래밍에서 일반적입니까?



답변

import 문을 생략하고 전체 경로를 사용하여 참조 할 수 있습니다. 예 :

java.util.Date javaDate = new java.util.Date()
my.own.Date myDate = new my.own.Date();

그러나 나는 같은 이름과 비슷한 기능을 가진 두 개의 클래스를 사용하는 것은 당신이 어떤 것이 무엇인지 정말로 명확하게 할 수 없다면 일반적으로 최선의 생각이 아니라고 말할 것입니다.


답변

클래스를 가져 오는 대신 정규화 된 이름을 사용하십시오.

예 :

//import java.util.Date; //delete this
//import my.own.Date;

class Test{

   public static void main(String [] args){

      // I want to choose my.own.Date here. How?
      my.own.Date myDate = new my.own.Date();

      // I want to choose util.Date here. How ?
      java.util.Date javaDate = new java.util.Date();
   }
}


답변

예. 동일한 단순 이름을 가진 클래스를 가져올 때 정규화 된 클래스 이름으로 참조해야합니다. 다른 개발자가 작업 할 때 파일에 무엇이 있는지 알 수 있도록 import 문을 그대로 둡니다.

java.util.Data date1 = new java.util.Date();
my.own.Date date2 = new my.own.Date();


답변

이를 수행하는 또 다른 방법은 하위 클래스를 만드는 것입니다.

package my.own;

public class FQNDate extends Date {

}

그런 다음 java.util.Date가있는 패키지에서 my.own.FQNDate를 가져옵니다.


답변

고유 한 날짜 클래스가있는 경우 기본 제공 날짜 클래스와 구별해야합니다. 즉, 왜 자신을 만들었습니까? ImmutableDate 또는 BetterDate 또는 NanoDate와 같은 것, 심지어 MyDate도 자신의 날짜 클래스가있는 이유를 나타냅니다. 이 경우 고유 한 이름을 갖게됩니다.


답변

가져 오기를 사용하여 그중 하나를 가져올 수 있습니다. 다른 모든 유사한 클래스의 경우 정규화 된 클래스 이름을 지정해야합니다. 그렇지 않으면 컴파일 오류가 발생합니다.

예 :

import java.util.Date;

class Test{

  public static void main(String [] args){

    // your own date
    my.own.Date myOwndate ;

    // util.Date
    Date utilDate;
  }
}


답변

이 시나리오는 실제 프로그래밍에서 흔하지는 않지만 그렇게 이상하지는 않습니다. 때로는 서로 다른 패키지의 두 클래스가 같은 이름을 가지며 둘 다 필요합니다.

두 클래스의 이름이 같은 경우 둘 다 동일한 기능을 포함해야하며 둘 중 하나만 선택해야하는 것은 아닙니다.

둘 다 필요하다면 그것을 사용하는 데 아무런 해가 없습니다. 그리고 그것은 나쁜 프로그래밍 아이디어도 아닙니다.

그러나 우리가 참조하는 클래스를 명확히하기 위해 클래스의 정규화 된 이름 (같은 이름을 가진)을 사용해야합니다.

🙂