我搜索了很多關於我的問題的答案,並發現了幾個選項,想知道這是最佳實踐。外部訪問內部私人類字段的Java最佳實踐
使用案例: 所以我有一個單一類AccontManager
,它有一個只與它有關的內部類,這是一個User
類。現在
public class AccountManger {
private static final AccountManger ourInstance = new AccountManger();
private User user;
public static AccountManger getInstance()
{
return ourInstance;
}
private AccountManger(){}
public User getUser(){
return this.user;
}
private class User{
private String id;
private User (String id){
this.id = id;
}
}
}
的情況是,User
領域具有訪問到外面包類,但用戶類是獨一無二隻此singleton類,因此內部類是私有的。
理想情況下,在內部類中創建公共getter方法以獲取用戶字段將是最好的,但由於內部類是私有的,這是不可能的。
可能的做法:
實踐:創建外
AccountManager
類各自的getter方法爲User
領域。缺點:用戶字段與
User
相關,因此外部類不應該在其字段中使用getter方法。代碼示例:
public class AccountManger { private static final AccountManger ourInstance = new AccountManger(); private User user; public static AccountManger getInstance() { return ourInstance; } private AccountManger(){} public User getUser(){ return this.user; } public String getUserId() // <-- get User id { return user.id; } private class User{ private String id; private User (String id){ this.id = id; } } }
實踐:在
User
修飾符更改爲public
,但保留構造私有的,所以它不能被實例化。缺點:內
User
類會隨着AccountManager
單個類,它不應該是的成員可見。代碼示例:
public class AccountManager { private static final AccountManger ourInstance = new AccountManager(); private User user; public static AccountManager getInstance() { return ourInstance; } private AccountManger(){} public User getUser(){ return this.user; } public String getUserId() // <-- get User id { return user.id; } private class User{ private String id; private User (String id){ this.id = id; } } }
實踐:
- 創建一個公共接口,例如,
IUser
- 使內部類
User
實現該接口 - 添加到外部類,在這種情況下
AccountManager
的吸氣劑的方法向User
實例
缺點:需要以從
User
獲得數據所用的接口。代碼示例:
public class AccountManager { private static final AccountManager ourInstance = new AccountManager(); private User user; public interface IUser{ String getName(); } private AccountManager(){} public static AccountManager getInstance(){ return ourInstance; } public User getUser(){ return this.user; } private class User implements IUser{ private String id; private User(String id){ this.id = id; } @Override public String getName() { // <-- get user id return id; } } }
所以,你有什麼感想?
列出的任何一個選項?
還有其他的一些方法嗎?- 創建一個公共接口,例如,
謝謝您的輸入