我搜索了很多关于我的问题的答案,并发现了几个选项,想知道这是最佳实践。外部访问内部私人类字段的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; } } }
所以,你有什么感想?
列出的任何一个选项?
还有其他的一些方法吗?- 创建一个公共接口,例如,
谢谢您的输入