我有兩個類,其中一個類繼承另一個類,如下所示:
public class UserData {
protected final String emailAddress;
protected final String name;
public UserData(final String emailAddress, final String name) {
this.emailAddress = emailAddress;
this.name = name;
}
public Optional<String> getEmailAddress() {
return Optional.ofNullable(this.emailAddress);
}
public Optional<String> getName() {
return Optional.ofNullable(this.name);
}
}
public class EmployeeData extends UserData {
protected final String designation;
public EmployeeData(
final String emailAddress,
final String name,
final String designation
) {
super(emailAddress, name);
this.designation = designation;
}
public Optional<String> getDesignation() {
return Optional.ofNullable(this.designation);
}
}
我需要在另一個類中創建方法,該方法可以回傳這些物件中的任何一個并且可以訪問所有 getter。我已經嘗試UserData為這兩種物件創建回傳型別(下面給出的示例),但是那樣,我無法訪問getDesignationEmployeeData 的 getter。有沒有更好的方法可以設定繼承來避免這個我無法訪問子特定屬性的問題?
public UserData getData() {
if (...some condition) {
return new EmployeeData("[email protected]", "myName", "Dev")
}
else {
return new UserData("[email protected]", "myName");
}
}
我確實研究了這些 stackoverflow 問題,但無法完全解決我的用例
- C#如何創建一個可以回傳子類或父類的函式
- Java 中 C# IEnumerable 的等價物是什么?具有協變能力的,而不是可迭代的
uj5u.com熱心網友回復:
因為我們回傳的物件是 type UserData,我們將無法呼叫添加到子類中的方法,EmployeeData。您可以getDesignation()在類中創建方法UserData并讓它回傳一個空的可選物件。
public Optional<String> getDesignation() {
return Optional.empty();
}
在這種情況下,您現在可以覆寫類中的方法以像這樣EmployeeData回傳,designationOptional
@Override
public Optional<String> getDesignation() {
return Optional.ofNullable(this.designation);
}
getDestination()現在您將可以從回傳的物件訪問方法getData(),但是您必須小心并理解如果回傳的型別是的UserData,那么在呼叫時getDesignation()您將收到一個Optional.empty()物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/515863.html
標籤:爪哇班级遗产
上一篇:Dart抽象靜態方法
