언제 개인 클래스를 정적으로 만들고 싶습니까?
일반적으로 개인 클래스를 정적으로 선언하면 어떤 이점이 있습니까?
어떤 경우에 다음 중 하나를 다른 것보다 사용하고 싶습니까?
private static class Foo
{
...
}
vs
private class Foo
{
...
}
나는 이것이 좋은 출발점이라고 생각합니다 : http://java67.blogspot.fi/2012/10/nested-class-java-static-vs-non-static-inner.html
1) 중첩 된 정적 클래스는 외부 클래스에 대한 참조가 필요하지 않지만 비 정적 중첩 클래스 또는 내부 클래스에는 외부 클래스 참조가 필요합니다. Outer 클래스의 인스턴스를 생성하지 않고 Inner 클래스의 인스턴스를 생성 할 수 없습니다. 이것은 중첩 클래스를 정적으로 또는 비 정적으로 만들 때 고려해야 할 가장 중요한 사항입니다.
2) 정적 클래스는 실제로 클래스의 정적 멤버이며 정적 컨텍스트 (예 : 정적 메서드 또는 외부 클래스의 정적 블록)에서 사용할 수 있습니다.
3) 정적 및 비 정적 중첩 클래스의 또 다른 차이점은 메서드 및 필드와 같은 비 정적 멤버에 직접 중첩 된 정적 클래스에 액세스 할 수 없다는 것입니다. 그렇게하면 "비 정적 멤버는 정적 컨텍스트에서 사용할 수 없습니다"와 같은 오류가 발생합니다. Inner 클래스는 Outer 클래스의 정적 및 비 정적 멤버 모두에 액세스 할 수 있습니다.
둘러싸는 클래스의 멤버 변수 / 메서드에 액세스해야하는 경우 비 정적 형식을 사용하십시오. 그렇지 않은 경우 정적 양식을 사용하십시오.
나는 당신이 내부 클래스를 언급하고 있다고 가정합니다.
동기는 당신이 내면의 수업을 어떻게 연관시키고 싶은지에서 나올 것이라고 생각합니다. 내부 클래스를 외부 클래스의 특정 인스턴스에 연결하려면을 사용 private class
하고 그렇지 않으면을 사용 private static class
합니다.
일반 추상 클래스에서 특정 예외를 갖는 데 유용하다는 것을 알았습니다. 즉 :
public abstract class AbstractClass <T>
{
private void doSomethingOrThrowException() throws SpecificException
{
....
if ( ! successful)
{
throw new SpecificException();
}
}
private static class SpecificException extends Exception {}
}
정적을 제외하면 컴파일러는 다음과 같은 오류를 표시합니다. The generic class AbstractClass<T>.SpecificException may not subclass java.lang.Throwable
정적 클래스는 인스턴스를 만들지 않고도 액세스 할 수 있다는 점에서만 일반 클래스와 다릅니다. 따라서 매번 액세스 할 수있는 클래스가 필요하면 static
참조 URL : https://stackoverflow.com/questions/6223093/when-would-i-want-to-make-my-private-class-static
'Development Tip' 카테고리의 다른 글
AMP HTML은 무엇이며 프레임 워크 / 도구 X와 어떻게 어울리나요? (0) | 2020.12.31 |
---|---|
Xcode에서 스토리 보드 파일에 대한 불필요한 편집을 피하는 방법은 무엇입니까? (0) | 2020.12.31 |
상속 된 함수에 대한 오버로드 해결 (0) | 2020.12.31 |
블룸 필터의 반대? (0) | 2020.12.31 |
char *와 std :: uint8_t * 사이의 reinterpret_cast-안전합니까? (0) | 2020.12.31 |