2
여호수아 블로흐는 그의 책에서 언급 (효과적인 자바 - 2 판) 항목에서 4 : -어떻게 유틸리티 클래스 대신 클래스를 확장의 최종 클래스 그룹 방법을 사용할 수 있습니까?
정적 인 필드와 정적 메소드 (유틸리티 클래스)를 포함클래스는 그룹 방법에 사용 할 수 있습니다
최종 클래스 대신 클래스를 확장.
는 사람이 문장을 설명 할 수 있습니까?
여호수아 블로흐는 그의 책에서 언급 (효과적인 자바 - 2 판) 항목에서 4 : -어떻게 유틸리티 클래스 대신 클래스를 확장의 최종 클래스 그룹 방법을 사용할 수 있습니까?
정적 인 필드와 정적 메소드 (유틸리티 클래스)를 포함클래스는 그룹 방법에 사용 할 수 있습니다
최종 클래스 대신 클래스를 확장.
는 사람이 문장을 설명 할 수 있습니까?
공통적 인 실수는 일반적인 static
메서드를 포함하는 클래스를 만든 다음 상속을 사용하여 메서드가 필요한 클래스에서 메서드에 쉽게 액세스 할 수 있도록하는 것입니다.
class Utility {
static utilityMethod() {
// do something usefull
}
}
class Application extends Utility {
someMethod() {
utilityMethod();
}
}
이를 나누기 지향 원칙을 반대하지만, ApplicationClass
이 서브 클래스 UtilityClass
의 있어야 적이있다. 대신 사용한다 :
final class Utility {
Utility() {
// avoid instantiation
}
static utilityMethod() {
// do something useful
}
}
class Application {
someMethod() {
UtilityClass.utilityMethod();
}
}
지금 자바 언어 설계자가 사용하기 위 더 매력적하기 위해 사용하는 여러 가지 방법이 있습니다. 하나는 정적 가져 오기 개념입니다. 다른 하나는 인터페이스가 정적 메서드를 정의 할 수있게합니다. 이 경우 위가 될 것입니다 : 대부분의 수입이 자동적으로는 IDE에 의해 처리 특히 때문에, 훨씬 짧은
import static Utility.utilityMethod;
final interface Utility {
static utilityMethod() {
// do something useful
}
}
class Application {
someMethod() {
utilityMethod();
}
}
합니다. 위의에 대해 좀 더 논의/포인터 here를 찾을 수 있습니다. Java 7까지는 인터페이스에서 정적 메소드를 선언 할 수 없습니다.