2010-06-25 2 views
1

Java에서는 클래스 외부의 Vector에있는 개인 클래스를 참조하면 어떻게됩니까?공개적으로 사용 된 벡터의 개인 클래스

예 : 그것은 형의 Object 달러 (A $)의 B에 대한 참조를 반환

public class A { 
    private class B {} 
    public Vector<B> vector = new Vector<B>(); 

    public A() { 
    vector.add(new B()); 
    } 
} 

public class C { 
    public C() { 
    A a = new A(); 
    a.vector.get(0); // <- What does this return? 
    } 
} 
+0

시도해보십시오. – DaveJohnston

+0

이 벡터 예제는 모두 어디에서 왔습니까? ArrayList 대신 벡터를 설교하는 학습 자료가 있습니까? –

+0

나 한테 묻고있어? 이 예제는 내가 채찍질 한 것입니다. 나는 ArrayList가 Vector보다 빠르다는 것을 결코 알지 못했다. 그것은 내가 찾을 수있는 javadocs에서 아무 것도 말하지 않는다. 저는 항상 C++/STL 배경 때문에 Vector를 사용했습니다. –

답변

1

:

System.out.println(a.vector.get(0)); 

을 당신이 뭔가를 얻을 것이다

그러나 B 멤버 중 하나에 액세스 할 수 없습니다. 예를 들어 클래스 A를 다음으로 변경하면

public class A { 
    private class B { 
     public int x; 
    } 
    public Vector<B> vector = new Vector<B>(); 

    public A() { 
    vector.add(new B()); 
    vector.get(0).x = 10; 
    } 
} 

당신은 여전히이 작업을 수행 할 수 없습니다 : 그것은 the type A.B is not visible을 말할 것이다

public static void main(String[] args) { 
    A a = new A(); 
    System.out.println(a.vector.get(0).x); // this won't compile 
} 

.

1

.

Object 참조에 할당 할 수 있습니다.

Object o = a.vector.get(0); 

리플렉션을 사용하여 o 속성을 조사 할 수도 있습니다.

일반적인 알림으로는 벡터 대신 java.util.ArrayList을 사용하십시오.

1

그것은 A.B 유형의 객체를 반환합니다. 그러나 변수에 할당하거나 그 위에 어떤 메소드도 호출 할 수 없으므로 아무 것도 할 수 없습니다. 당신이 할 경우는 그 B입니다 알 수 있도록,

public static void main(String[] args) { 
    A a = new A(); 
    Object o = a.vector.get(0); // <- What does this return? 
    System.out.println(o.getClass()); 
} 

클래스 달러 (A $)의 B는 : 당신이 코드를 시도 할 수 있습니다

[email protected] 
+1

toString() 메서드를 추가하면 toString()이 반환하는 모든 내용이 멋지게 출력됩니다. 그러나 toString()을 직접 호출하면 컴파일이 실패합니다. –

관련 문제