2011-04-24 4 views
37

다른 이름으로 클래스를 가져올 수있는 방법은 무엇입니까? 만약 내가 javax.C라는 클래스와 java.C라는 다른 클래스를 가지고 있다면, 나는 C1이라는 이름으로 javax.C를 가져오고 C2라는 이름으로 java.C를 가져올 수있다.java, 다른 이름으로 클래스를 가져올 수있는 방법이 있습니까

우리는 C#으로이 같은 작업을 수행 할 수 있습니다

using Sys=System; 

또는 VB를 :

Imports Sys=System 
+0

(다른 대답에서 적응 아래 예)를 사용 이처럼 :.. 수입 java.util의 {ArrayList에는 => JavaList} – bartektartanus

답변

41

아니, 자바 같은 것은 존재하지 않는다. 원래 이름으로 만 클래스를 가져올 수 있으며 가져 오지 않은 모든 클래스에 대해 정규화 된 이름을 사용해야합니다 (java.lang의 클래스와 현재 클래스의 패키지 제외).

4

간략히하자면, 자바에서는 불가능합니다.

2

아니요. Java 의도적으로 번이 typedef 번으로 생각됩니다. 좋은 소식은, 유형을 보면, 그것이 무엇인지 알 것입니다. 다른 것의 별칭 일 수는 없습니다. 별칭을 별칭으로 지정하는 것입니다.

새 개념이 실제로 새로운 이름을 가질만한 가치가있는 경우 새로운 유형을 선택하는 것이 가장 좋습니다.

Sys=System의 사용 예제는 대부분의 Java 개발자가 눈살을 찌를 것입니다. 일부는 최종 클래스이기 때문에

+7

은 실제로는 그냥있어 예를 들어 더 나은 사용 사례는 이름이 충돌하는 클래스를 가져 오는 것입니다 (항상 발생합니다). – Pacerier

+1

@Pacerier name clash는 java에서는 흔하지 않지만 패키지 이름과 함께 전체 클래스 이름을 사용합니다. rpose는 특히 이름 충돌을 해결하는 것입니다. – irreputable

+5

패키지의 목적이 특히 이름 충돌을 해결하는 것이라고는 생각하지 않습니다. 패키지는 논리적으로 항목을 그룹화하기위한 것입니다. 이름 충돌은 OOP에서 "예상"입니다. 그래서 우리는 패키지/네임 스페이스가 있습니다. – Pacerier

4

당신은 모든 경우에서이 작업을 수행 할 수는 없지만

class RenameTest { 

    private static class MyRenamedClass extends ClassToRename { } 


    MyRenamedClass renamed = new ClassToRename("lol, the class was renamed"); 

    void foo() { 
     renamed.originalFoo(); // because MyRenamedClass doesn't override any 
           // methods, it always defaults to the parent class 
    } 
} 
+13

을 작성하는 것을 싫어한다. 나는 이것이 정말로 좋다고 느끼지 않는다는 것을 분명히하고 싶다. 생각. 가능한 일이라고 말하면됩니다. – corsiKa

+10

+1 "LOL, 클래스 이름이 바뀌 었습니다" – Pacerier

+0

사실은 마찬가지입니다. 예를 들어,'RenameTest'가'MyRenamedClass' 타입의 매개 변수를 가진 공용 메소드를 생성하고 또 다른 클래스가'ClassToRename'의 인스턴스로 그 메소드를 호출하려고하면 결과는 컴파일 에러가됩니다. 또한 ClassToRename의 * static *에 액세스하는 데 도움이되지 않습니다. 그러나 당신은 좋은 생각이라고 말하지 않았습니다. 그렇지 않다는 증거를 더 많이 덧붙이면됩니다. – ToolmakerSteve

0

자바 정적 이름 바꾸기를 지원하지 않는 클래스를 확장 할 수 있습니다. 하나의 아이디어는 문제의 객체를 새로운 클래스 이름으로 서브 클래 싱하는 것입니다 (그러나 특정 부작용/제한 때문에 좋은 생각이 아닐 수도 있습니다. 예를 들어, 대상 클래스에 최종 수정자가있을 수 있습니다.) 허용되는 경우 코드가 명시 적 유형 검사 getClass() 또는 등 당신은 스칼라에서이 작업을 수행 할 수 있습니다

class MyApp { 

    public static void main(String[] args) { 
    ClassToRename parent_obj = new ClassToRename("Original class"); 
    MyRenamedClass extended_obj_class_renamed = new MyRenamedClass("lol, the class was renamed"); 
    // these two calls may be treated as the same 
    // * under certain conditions only * 
    parent_obj.originalFoo(); 
    extended_obj_class_renamed.originalFoo(); 
    } 

    private static class ClassToRename { 
    public ClassToRename(String strvar) {/*...*/} 
    public void originalFoo() {/*...*/} 
    } 

    private static class MyRenamedClass extends ClassToRename { 
    public MyRenamedClass(String strvar) {super(strvar);} 
    } 

} 
관련 문제