2013-05-13 2 views
2

this 오라클 튜토리얼에서 촬영 :제네릭의 필요성은 무엇입니까? 다음 코드에서

public class FileVisitor extends SimpleFileVisitor<Path> 

제네릭을 사용 할 필요가? 나는 Generics의 이러한 측면을 얻을 수 없다. <Path>을 지정하는 것이 근본적인 이유는 무엇입니까? 아니면 SimpleFileVisitor이 그런 식으로 선언 된 이유는 무엇입니까? 디자이너가 왜이 맥락에서 제네릭을 사용하기로 결정했는지 더 좋아? 그 방법에는 경로 매개 변수가 있습니다. 충분하지 않아야합니까? 미리 감사드립니다. 말 파일 대신 경로를 사용하도록 지정되어

SimpleFileVisitor<Path> 

를 사용하여

+1

내 눈에는 그것의 큰 거래를하는 것이 nessecary가 아닙니다. 제네릭은 컴파일러의 도우미 도구 일뿐입니다. 그래서 그는 런타임 에러를 얻는 대신에 컴파일 에러를 생성 할 수 있습니다. – reporter

답변

1

실제로 메소드에는 T 매개 변수가 있고 T는 지정한 클래스 선언에 의해 선언 된 전달 매개 변수입니다. (

visitFile(File file, BasicFileAttributes attrs) 

등 ...

2

. SimpleFileVisitor가 Path를 지정하지 않기 때문에 메서드는 generics없이 Path를 가질 수 없습니다.

2

클래스 SimpleFileVisitor 제네릭 메서드 매개 변수가 있습니다

class AnotherFileVisitor extends SimpleFileVisitor<File> 

방법이처럼 보이는 것입니다 : 예를 들어, 클래스 선언은 다음과 같이보고, 경우 예 : public FileVisitResult visitFileFailed(T file, IOException exc)).

당신은 FileVisitor에서 그들을 오버라이드하고 있습니다. 거기서 사용 된 제네릭 타입이 없다면 메소드 매개 변수로 "Whatherer"를 넣을 수 있고 컴파일러는 제네릭을 주장하지 않고 동일한 클래스를 사용해야합니다 SimpleFileVisitor에 정의 된 모든 메서드에서 오버라이드 된 메서드 (이 경우 Path) 형식의 매개 변수로

그것은 명확성과 유형 안전 문제입니다.

관련 문제