繁体   English   中英

如何检查一个类的实例是否可以访问另一个类中的方法?

[英]How do I check if an instance of a class has access to a method in another class?

我正在做一个小项目,我想要一个名为“DevelopmentEmployee”的类的列表,但只允许其中一个类操作另一个类“Project”中的某些方法。 按照我的实现方式,Project 类有一个名为 projectLeader 的字段,它的类型为 DevelopmentEmployee。 当 DevelopmentEmployee 尝试访问类 Project 中的方法时,我想检查 DevelopmentEmployee 是否等于 Project 的 projectLeader 的特定实例。

就像是

public class Project {
    private DevelopmentEmployee projectLeader;
    private List < Activity > activities = new ArrayList < Activity > ();

    public Project(DevelopmentEmployee pL) {
        this.projectLeader = pL;
    }

    public void addActivity(String activityName) {
        if (projectLeader.equals(DevelopmentEmployee * ) {
            activities.add(activity);
        }
    }
}

但是我想不出一种方法来使访问要求起作用。 类 Project 的实例如何知道谁试图访问它?

你也应该通过DevelopementEmployeeaddActivity检查它反对projectLeader。

public void addActivity(String activityName,DevelopmentEmployee employee) {
  if (projectLeader.equals(employee) {
      activities.add(activity);
    }      
}

然后,您需要覆盖DevelopmentEmployee类中的 equals 方法,以正确检查相等性,如下所示:

public boolean equals(DevelopementEmployee e){
    if(e!=null && this.employeeId==e.employeeId)
        return true;
    else
        return false;
}

想到了几种可能性:

向方法提供访问项目方法的实例:

public void addActivity(String activityName, DevelpmentEmployee user) {
    if (projectLeader.equals(user)) {`

创建一些类来保存有关活动用户的信息并在方法中使用它:

public class Project {
    private UserRegistry userRegistry;
    private List<Activity> activities = new ArrayList<Activity>();

    public Project(UserRegistry userRegistry) {
        this.userRegistry = userRegistry;
    }

    public void addActivity(String activityName) {
        if (userRegistry.isActiveUserProjectLeader()) {
            activities.add(activity);
        }
    }
}

public class UserRegistry {
    private DevelpmentEmployee projectLeader;
    private DevelpmentEmployee activeUser;
    private List<DevelpmentEmployee> user;

    public void addUser(DevelpmentEmployee user) { ... }
    public void makeProjectLeader(DevelpmentEmployee newLeader) { ... }
    public void makeActiveUser(DevelpmentEmployee newActiveUser) { ... }
    public boolean isActiveUserProjectLeader() { ... }
}`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM