Java: 정적 클래스?
나는 유틸리티 기능이 가득한 수업을 듣는다.인스턴스의 인스턴스화는 의미가 없지만 메서드를 호출하고 싶습니다.어떻게 대처하면 좋을까요?정적 클래스?추상?
최종으로 표시된 클래스의 개인 생성자 및 정적 메서드입니다.
항목 4: 개인 컨스트럭터를 사용하여 비안정성 적용
·클래스를 추상화함으로써 비인스턴티성을 강제하려고 해도 기능하지 않습니다.
- 기본 생성자는 클래스에 명시적 생성자가 없는 경우에만 생성되므로 개인 생성자를 포함하면 클래스를 인스턴스화할 수 없습니다.
// Noninstantiable utility class
public class UtilityClass
{
// Suppress default constructor for noninstantiability
private UtilityClass() {
throw new AssertionError();
}
}
명시적 생성자는 비공개이므로 클래스 외부에서 액세스할 수 없습니다.AssertionError는 엄밀하게 요구되는 것은 아니지만 클래스 내에서 컨스트럭터가 잘못 호출되었을 경우에 대비한 보험을 제공합니다.어떤 상황에서도 클래스가 인스턴스화되지 않음을 보증합니다.이 관용구는 생성자가 호출할 수 없도록 명시적으로 제공되기 때문에 약간 직관에 어긋납니다.따라서 위와 같이 코멘트를 포함하는 것이 현명합니다.
부작용으로, 이 관용구는 또한 클래스가 하위 분류되는 것을 막는다.모든 생성자는 명시적으로든 암시적으로든 슈퍼 클래스 생성자를 호출해야 하며, 하위 클래스에는 호출할 수 있는 액세스 가능한 슈퍼 클래스 생성자가 없습니다.
java.lang과 유사한 유틸리티 클래스가 있는 것 같습니다.수학.
이 접근방식은 프라이빗 컨스트럭터와 스태틱 메서드를 사용한 최종 클래스입니다.
그러나 이것이 테스트 가능성에 어떤 영향을 미치는지 주의해 주십시오. 이 기사를 읽을 것을 권장합니다.
스태틱 방식은 테스트 불가능
단지 상류로 헤엄치기 위해서 정적인 멤버와 클래스는 OO에 참여하지 않기 때문에 악합니다.아니, 악은 아니지만, 진지하게 접근하기 위해 싱글톤 패턴이 있는 일반 클래스를 추천합니다.이렇게 하면 향후 어떠한 경우에도 행동을 무효화해야 하는 경우에는 중대한 재설정이 필요하지 않습니다.OO는 당신의 친구입니다 :-)
내 $.02
"프라이빗 컨스트럭터" 인수에 대한 코멘트: 이봐요, 개발자들은 그렇게 멍청하지 않아요; 하지만 그들은 게으릅니다. 객체를 만들고 정적 메서드를 호출합니까?일어나지 않을거야.
당신의 수업이 악용되지 않도록 하기 위해 너무 많은 시간을 보내지 마세요.동료들을 위한 믿음을 가지세요.그리고 당신의 수업을 어떻게 보호하든 오용하는 방법은 항상 있다.오용될 수 없는 유일한 것은 완전히 쓸모없는 것이다.
- 최종 클래스 및 개인 컨스트럭터(양호하지만 필수는 아님)
- 퍼블릭 스태틱 방식
을 반 the 、 을 、 there 、 there 、 there 、 there 、 there 、 there 、 there 、 there 、 there there there 。static
을 선언해 static
자바의 수학 수업처럼 평소처럼 반 이름부터 불러야 합니다.
또한 시공사를 비공개로 할 필요는 없지만, 그렇게 하는 것이 좋습니다.생성자를 비공개로 표시하면 다른 사용자가 클래스의 인스턴스를 만든 다음 해당 인스턴스에서 정적 메서드를 호출할 수 없습니다.(이러한 콜은 Java에서도 동일하게 동작합니다.오해의 소지가 있어 코드를 읽기 쉽게 할 수 없습니다.)
lombok https://projectlombok.org/features/experimental/UtilityClass에서 @UtilityClass 주석을 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/1844355/java-static-class
'programing' 카테고리의 다른 글
Visual Studio 오류:편집을 위해 저장 프로시저를 로드할 수 없습니다. (0) | 2022.10.23 |
---|---|
vue 및 laravel API를 사용하여 사용자 세션 데이터를 관리하는 모범 사례 (0) | 2022.10.23 |
Amazon RDS 데이터베이스 서버 인스턴스에서 "mysqladmin flush-hosts" 명령을 실행하는 방법 (0) | 2022.10.23 |
setAccessible을 "합법적" 사용으로만 제한하는 방법 (0) | 2022.10.23 |
vue-router를 가져오는 동안 Vue가 정의되지 않았음 (0) | 2022.10.23 |