我可以限制另一个类可以在Java中调用的方法吗?
假设我有类A
, B
和C
,其中类C
具有可读写属性:
public class C { private int i = 0; // Writable. public void increment() { i++; } // Readable. public int getScore() { return i; } }
是否可以只让A
使用increment()
方法,只让B
使用getScore()
方法?
不,不可能分配每类访问权限。
考虑将您的类分成单独的接口,以便每个类只获得一个具有所需接口的对象。 例如:
interface Incrementable { public void increment(); } interface HasScore { public int getScore(); } class C implements Incrementable, HasScore { /* ... */ } class A { public A(Incrementable incr) { /* ... */ } } class B { public B(HasScore hs) { /* ... */ } }
当然,有安全隐患,但这应该让你思考正确的方向。
是的,但是你必须经历一些旋转。
public interface Incrementable { public void increment(); } public interface Readable { public int getScore(); } public class C implements Incrementable, Readable { ... }
现在,当您在A中定义接收对B
实例的引用的方法时,请定义该方法以获取Incrementable
。 对于B
,将其定义为Readable
。
Java有4个范围:private,protected,public和“package”。 可以从任何地方访问公开的内容。 仅受子类保护。 私人只是那个阶级。 “package”范围未命名,但如果省略其他三个范围,则假定包范围。 这只能由同一个包中的其他类访问。
HTH。
不,不可能这样做。
不是你想要的,但你可以上去堆栈跟踪(创建一个exception)并检查调用你的increment方法的类。
虽然直接的答案是否定的,但另一种解决方法(一个丑陋的方法)可能是创建扩展第三个的两个接口(或者你可以只使用一个Object作为参数):Reader和Writer,将调用类作为参数传递给每个函数:
public interface Caller; public interface Reader extends Caller; public interface Writer extends Caller; public void increment(Caller c) { if (c instanceof Writer) { i++; } }