gpt4 book ai didi

java - 只允许访问类的少数属性?

转载 作者:太空宇宙 更新时间:2023-11-04 15:09:30 24 4
gpt4 key购买 nike

我在类(class)下面。

SomeClass.java

   public class SomeClass {

private String name;
private String id;
private String access;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAccess() {
return access;
}
public void setAccess(String access) {
this.access = access;
}

public void doSomeFunctionality(){

//does some logic using name and id

}



}

现在我只需向客户端公开上述类的几个方法。我可以这样做。

SomeOtherClass.java

public class SomeOtherClass {
private SomeClass someClass = new SomeClass();

public void setName(String name) {
someClass.setName(name);
}


public void setId(String id) {
this.setId(id);
}

}

通过执行上述操作,我可以限制客户端无法访问的一种方法,并且仅公开所需的方法。现在客户端实例化 SomeClass 并将数据填充到 SomeOtherClass.javasomeClass 属性中。

但是现在我如何从 SomeOtherClass.java 获取填充的数据?

public SomeClass getSomeClass() {
return someClass;
}

如果我像上面一样提供 getter 方法来获取 SomeOtherClass.java 中的 SomeClass,那么即使客户端也可以访问它,但我不想这样做。

但是如果我可以直接填充 someClass 实例,那么我可以简单地在同一个实例上调用 doSomeFunctionality() 。就像getSomeClass().doSomeFunctionality();我怎样才能克服上述情况?

谢谢!

最佳答案

您的问题似乎很困惑,但我认为这就是您正在寻找的答案,

让客户获取信息的方法应该与让他们设置信息的方法完全相同。您不应该提供对内部 SomeClass 的访问 - 这违背了整个要点。因此,如果您只想提供对 name 属性的读写访问权限,您的外部类应如下所示:

public class SomeOtherClass {
private SomeClass someClass = new SomeClass();

public void setName(String name) {
someClass.setName(name);
}


public String getName() {
return someClass.getName();
}

}

您不必使它们可以获得的属性与它们可以设置的属性相同。例如,您还可以允许他们“获取”ID,但不设置它。如果您希望他们能够访问所有属性,请为 SomeOtherClass 中的所有属性提供 getter。如果是这种情况,您可能需要考虑创建一个接口(interface),该接口(interface)指定所有 getter 方法,并由 SomeClass 和 SomeOtherClass 实现,这两个类也实现它们所需的 setter 方法。

如果您始终希望提供完全的“读取”访问权限但限制“写入”访问权限,还有其他架构方法,如果您提出要求,我们可以探讨这些方法。

关于java - 只允许访问类的少数属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21529665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com