이름이 같은 두 클래스를 가져오는 중입니다.어떻게 대처해야 할까?
예를 들어 다음과 같은 코드가 있습니다.
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 {
}
그리고 my.own을 Import합니다.java.util이 있는 패키지의 FQNDate.날짜.
독자적인 날짜 클래스가 있는 경우, 빌트인 날짜 클래스와 구별해야 합니다.즉, 자신의 날짜 클래스를 만든 이유는 무엇입니까?UnmutableDate, BetterDate, NanoDate 등 MyDate에서도 자신의 날짜 클래스가 있는 이유를 알 수 있습니다.이 경우 이들은 고유한 이름을 갖게 됩니다.
Import를 사용하여 이들 중 하나를 Import할 수 있습니다.기타 유사한 클래스의 경우 Fully Qualified 클래스 이름을 지정해야 합니다.그렇지 않으면 컴파일 오류가 발생합니다.
예:
import java.util.Date;
class Test{
public static void main(String [] args){
// your own date
my.own.Date myOwndate ;
// util.Date
Date utilDate;
}
}
두 개의 다른 패키지에서 동일한 클래스 이름을 사용하는 경우 다음 두 가지 옵션이 있습니다.
1 Import에 사용할 클래스 이름을 선택하고 다른 클래스 이름을 사용합니다.
import my.own.Date;
class Test{
public static void main(String[] args){
// I want to choose my.own.Date here. How?
//Answer:
Date ownDate = new Date();
// I want to choose util.Date here. How ?
//Answer:
java.util.Date utilDate = new java.util.Date();
}
}
2-항상 완전 수식 클래스 이름을 사용합니다.
//no Date import
class Test{
public static void main(String[] args){
// I want to choose my.own.Date here. How?
//Answer:
my.own.Date ownDate = new my.own.Date();
// I want to choose util.Date here. How ?
//Answer:
java.util.Date utilDate = new java.util.Date();
}
}
이 시나리오는 실제 프로그래밍에서 그리 흔하지는 않지만, 그리 이상한 것도 아닙니다.다른 패키지에 포함된 두 클래스의 이름이 같을 수 있으며 둘 다 필요합니다.
두 클래스의 이름이 같은 경우 두 클래스 모두 동일한 기능을 포함하므로 둘 중 하나만 선택해야 합니다.
만약 둘 다 필요하다면, 그것을 사용해도 나쁠 것은 없습니다.그것도 나쁘지 않은 프로그래밍 아이디어입니다.
단, 어떤 클래스를 참조하고 있는지를 명확하게 하기 위해 (같은 이름을 가진) 클래스의 완전 수식 이름을 사용해야 합니다.
:)
예를 들어, 한 클래스를 다른 클래스에 매핑할 때(예: 개인 데이터를 나타내기 위해 새 클래스 세트로 전환하는 경우) 이 문제가 발생합니다.이 시점에서 두 클래스가 모두 필요합니다.이것이 코드의 포인트이기 때문입니다.한 클래스를 다른 클래스에 매핑하는 것입니다.또, 어느 장소에서도 클래스의 이름을 변경할 수 없습니다(이것도, 다른 사람이 한 것을 변경하는 것이 아니라, 매핑하는 것입니다).
완전 자격증도 한 가지 방법입니다.예를 들어 Java는 어떤 "개인"이 의미하는지 걱정하기 때문에 실제로 두 가져오기 문을 모두 포함할 수 없습니다.
같은 이름의 클래스를 호출할 경우 클래스를 호출할 패키지를 명시적으로 지정해야 합니다.
다음과 같이 할 수 있습니다.
import first.Foo;
public class Main {
public static void main(String[] args) {
System.out.println(new Foo());
System.out.println(new second.Foo());
}
}
package first;
public class Foo {
public Foo() {
}
@Override
public String toString() {
return "Foo{first class}";
}
}
package second;
public class Foo {
public Foo() {
}
@Override
public String toString() {
return "Foo{second class}";
}
}
출력:
Foo{first class}
Foo{second class}
같은 문제가 있었습니다만, 라이브러리 순서를 정렬했습니다.예를 들어 java.lang이 있었습니다.특수한 포인터예외 및 javacard.lang.특수한 포인터예외.첫 번째 클래스는 기본 라이브러리로 만들었으며, 다른 하나를 사용해야 하는 경우 풀 수식 클래스 이름을 명시적으로 지정할 수 있습니다.
언급URL : https://stackoverflow.com/questions/2079823/importing-two-classes-with-same-name-how-to-handle
'source' 카테고리의 다른 글
sklearn을 사용하여 데이터 프레임 열 확장 (0) | 2022.11.19 |
---|---|
MyISAM 레코드가 3억 5천만 개 이상인 25GB의 대용량 테이블을 업데이트하려면 어떻게 해야 합니까? (0) | 2022.11.19 |
Python에서 얕은 목록 평탄화 (0) | 2022.11.19 |
AWS RDS - 'the_db.*'에서 'the_user'@%'에 대한 GRANT ALL Privileges ON을 사용할 때 관리 사용자에 대한 액세스가 거부되었습니다. (0) | 2022.11.19 |
Python에서 주 번호를 얻는 방법은 무엇입니까? (0) | 2022.11.19 |