2012-10-31 2 views
7

Java 사용 : 나는 사람들의 시간을 낭비하고 여기에 게시하고 싶지 않지만 내 인터넷 검색 기술은 나에게 실패하고 대답을 찾을 수 없다. 제공된 코드를 통해 찾고있었습니다.자바에 관한 내용 <E> public static <E> 공백

public static <E> void printTree(TwoFourTree<E> tf) 

(참조로 Red-Black 트리에서 Two-Four Tree로 변환 중입니다). 내가 처음으로이 문제에 접근했을 때, 나는 대신에 사용할 것이고 public static void의 초기 메소드 선언에 포함하지 않았다. 그러나 문제가 발생하여 <E> 대신 대신 <Integer>을 사용 했음에도 불구하고이 문제를 해결하기 위해 <E>을 던졌습니다.

그래서 제 질문은 누군가가 정확히 <E>는 그것은 일반적인 방법를 생성

public static <E> void 
+1

일반적인 유형 매개 변수입니다. http://docs.oracle.com/javase/tutorial/java/generics/ –

답변

3

을 제네릭을 만드는 것입니다.

왜 제네릭을 사용 하시겠습니까? 다음은 유용한 시나리오 중 하나입니다. "나쁜 옛날"로 돌아가서, 어떤 객체와도 작업 할 수있는 클래스를 가지기를 원한다면, 모든 것을 선언해야합니다. 당신이 당신의 클래스를 강력하게 입력 할 수 있도록하여

// Your code 
MySuperList list = new MySuperList(); 
cars.Add(new Car("Ford Mondeo"));// Works 
cars.Add(new Fish("Herring")); // Works - which is a shame as a Fish is not a car! 

제네릭이를 해결,하지만 : 당신은 다음과 같은 코드를 작성할 수 -

public class MySuperList 
{ 
    public void Add(object a) { } 
} 

그러나, 이것은 당신이 어떤 유형의 안전을 얻을 수 없기 때문에, 짜증 일반적인 방식으로예 :

public class MySuperList<T> 
{ 
    // Add method will only accept instances of type T. 
    public void Add(T a) { } 
} 

// Your code 
MySuperList<Cars> list = new MySuperList<Cars>(); 
cars.Add(new Car("Ford Mondeo"));// Works 
cars.Add(new Fish("Herring")); // Compile-time error. 
+1

단지 기술적 인 것이지만 메서드 이름은 일반적으로 소문자로 시작합니다. – arshajii

+1

죄송합니다 - 나는 무역으로 C 프로그래머입니다;) –

0

에 무엇을 나에게 설명해 할 수있다; 즉, 모든 유형의 객체를 인수로 사용하는 TwoFourTree을 사용할 수 있습니다 (이 경우). 당신은, 예를 들어, 유일한 유형 List의 객체 개최 TwoFourTree의 동의 원하는 경우 (등 Integer, Double) 만 Number 객체를 원한다면

, 당신은

public static <E extends List> void ... 

로 당신을 방법을 정의 할 would

public static <E extends Number> void ... 

이러한 방법을 만드는 것이 실제로 유용 할 수 있습니다. 난 당신이 예를 들어, 여러 유형 매개 변수를 사용하여 동일한 작업을 수행 할 수 있습니다, 재미는 거기서 끝나지 않는다는 것을 지적한다 : 나는 당신이 도움이 일반적인 방법에 this 자습서를 읽어 찾을 수 있습니다 생각

public static <T, S extends Number> void ... 

를 '당신이 경우 더 많은 것을 배우고 싶습니다. 대신 쓰기

public static Integer ... 
public static Double ... 
public static Long ... 

0

...

당신이 할 모든이가 Generics로 알려진 자바 기능입니다 방법을

public static <E> 
+2

을 참조하십시오. Integer 또는 Void가 발생할 수있는 Integer void 메소드를 작성할 수 없습니다. 답변을 수정하거나 삭제하십시오. –

+0

어리석은 초보자 실수 : 그것을 알아 줘서 고마워. – elrado

관련 문제