모든 구현 클래스에 부모 필드를 기본값으로 초기화하는 기본 메서드를 제공하고 싶습니다. 따라서 각 Impl 클래스 내에서 이러한 초기화를 다시 정의 할 필요가 없습니다.
public abstract class Parent {
private String name;
public static Parent defaultParent() {
Parent parent = new Parent();
//fill default field values
parent.name = "default name";
return parent;
}
}
public class Child extends Parent {
}
이제 전화 할 수 있습니다 Child.defaultParent()
. 그러나 그것은 나에게 유형의 객체를 반환합니다 Parent
. 이런 식으로 객체가 Child
암시적인 객체가 될 수 있습니까? 그래서 defaultParent
메소드는 항상 구현 클래스의 유형을 반환합니까?
아마도 Java 8, 기능적 인터페이스 또는 이와 유사한 것입니까?
다음은 Java 8을 사용하는 한 가지 방법입니다.
public abstract class Parent {
private String name;
public static <T extends Parent> T defaultParent(Supplier<T> constructor) {
T parent = constructor.get();
//fill default field values
parent.name = "default name";
return parent;
}
}
public class Child extends Parent {
}
다음과 같이 정적 메서드를 호출 할 수 있습니다.
Child c = Parent.defaultParent(Child::new);
또는 정적 팩토리 메서드 대신 생성자 오버로드를 사용할 수 있습니다.
public abstract class Parent {
private String name;
public Parent(boolean useDefaults) {
if (useDefaults) {
//fill default field values
this.name = "default name";
}
}
}
public class Child extends Parent {
public Child(boolean useDefaults) {
super(useDefaults);
}
public Child() {
super(false);
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다