Java后门接口,或,通过调用对象限制方法访问
我正在使用Java。我想要一个类的setter方法,它只能被另一个类的“拥有”对象访问。我将更具体地说: 我有节点和端口接口。每个节点都有一组端口,每个端口都属于一个节点。可以启用或禁用端口,并使用简单的布尔属性进行处理。但是,我只想允许“拥有”端口的节点设置其启用/禁用属性。调用Node.fixYourPorts()时应该会发生这种情况(好的,它有一个不同的名称,但我试图简化) 因此,我希望每个人都能调用port.isEnabled(),但只有拥有节点才能调用port.setEnabled() 我可以想出一些方法来解决这个问题,但我不确定哪种方法最好,我担心我可能用错误的方式思考这个问题。迄今为止的想法:Java后门接口,或,通过调用对象限制方法访问,java,hibernate,oop,Java,Hibernate,Oop,我正在使用Java。我想要一个类的setter方法,它只能被另一个类的“拥有”对象访问。我将更具体地说: 我有节点和端口接口。每个节点都有一组端口,每个端口都属于一个节点。可以启用或禁用端口,并使用简单的布尔属性进行处理。但是,我只想允许“拥有”端口的节点设置其启用/禁用属性。调用Node.fixYourPorts()时应该会发生这种情况(好的,它有一个不同的名称,但我试图简化) 因此,我希望每个人都能调用port.isEnabled(),但只有拥有节点才能调用port.setEnabled()
有什么帮助吗?您可以将
端口
公开给客户端类,并通过提供setter方法的附加接口将其公开给节点
对象吗?e、 g.构建它的组件将创建(比如)一个可配置端口
(扩展端口
),并将其传递给节点
,但将端口作为一个端口
传递回客户端
interface ConfigurablePort extends Port {
void setValue();
}
// in some factory... Or perhaps in the Node itself?
public Port createPortForNode(Node node) {
ConfigurablePort port = new Port();
node.setPort(port); // as Configurable
return port; // as immutable
}
因此,您在这里不必担心打包问题,也可以避免实现您不想实现的方法(甚至抛出异常)的麻烦。您可以将
端口
公开给客户机类,并将其公开给节点
对象,并使用提供setter方法的附加接口吗?e、 g.构建它的组件将创建(比如)一个可配置端口
(扩展端口
),并将其传递给节点
,但将端口作为一个端口
传递回客户端
interface ConfigurablePort extends Port {
void setValue();
}
// in some factory... Or perhaps in the Node itself?
public Port createPortForNode(Node node) {
ConfigurablePort port = new Port();
node.setPort(port); // as Configurable
return port; // as immutable
}
因此,您在这里不必担心打包问题,也可以避免实现您不想实现的方法(甚至抛出异常)的麻烦。对于本应具有较少访问权限的端口用户,使用仅提供某些方法的接口公开对象。对于本应具有较少访问权限的端口用户,请使用仅提供某些方法的接口公开对象。问题是,客户端离访问权限只有一步之遥。但是,这仍然是一个改进,因为客户必须有意获得setter的访问权限,而不是让setter坐在那里供他们使用。嗯…@Michael注意到,
ConfigurablePort
是包私有的,所以没有人可以在包之外向下转换到它。@Péter啊,是的,我现在明白了。有点像我的#1,只是你做了一个包私有接口而不是包私有方法。这很有帮助……你是否太担心人们会情绪低落。?如果你担心滥用,那么你会担心通过反射等方式访问吗?问题是,客户离访问权只有一步之遥。但是,这仍然是一个改进,因为客户必须有意获得setter的访问权限,而不是让setter坐在那里供他们使用。嗯…@Michael注意到,ConfigurablePort
是包私有的,所以没有人可以在包之外向下转换到它。@Péter啊,是的,我现在明白了。有点像我的#1,只是你做了一个包私有接口而不是包私有方法。这很有帮助……你是否太担心人们会情绪低落。?如果你担心滥用,那么你是否担心通过反射等方式访问。?