Java中是否有方法可以使用某些类可以访问的方法?
class CommonClass{
void methodAvailableForClassA() {code goes here}
void methodAvailableForClassB() {code goes here}
}
class A{
CommonClass cc;
public void useCC(){
cc.methodAvalableForClassA();
}
}
class B{
CommonClass cc;
public void useCC(){
cc.methodAvalableForClassB();
}
}
我要问的是,是否有办法为某些类提供方法
答案 0 :(得分:1)
正如我在评论中写的那样,你没有提供足够的背景,我怀疑用更好的设计可以避免这个问题。
也就是说,您可以通过overloading
使用不同类型的方法“破解”它,并让对象将自己发送给方法:
class CommonClass{
void methodAvailableForClass(A a) {...}
void methodAvailableForClass(B b) {...}
}
class A{
CommonClass cc;
public void useCC(){
cc.methodAvailableForClass(this);
}
}
class B{
CommonClass cc;
public void useCC(){
cc.methodAvailableForClass(this);
}
}
答案 1 :(得分:0)
你问的是错误的问题,你问的是一个不合适的解决方案而不是问题。
您应该保留本地化为特定类专门化的方法或具有该实现的接口实现。
这被称为High Cohesion
and Loose Coupling
。
你正试图与这两件事完全相反,这不是一条好路。
任何时候你都有像CommonClass
这样的东西,你就会在完全不相关的东西上创造一堆混乱的依赖。
那些专门用于这些类的方法应该由那些使用它们的类拥有。
答案 2 :(得分:0)
正如其他地方所提到的,你应该寻找松散耦合 - 只要ClassA
和ClassB
都知道CommonClass
你有强耦合代码,而你'我遇到了这种问题。但是,如果您拆分出代表CommonClass
可能扮演的各种角色的单独接口,那么您可以将CommonClass的实例传递给ClassA
和ClassB
中的每一个,但作为实例单独的角色,只给客户端类访问特定的方法。
e.g。
public interface RoleForA {
void methodAvailableForClassA();
}
public interface RoleForB {
void methodAvailableForClassB();
}
public class CommonClass implements RoleForA, RoleForB {
....
}
public class ClassA {
private final RoleForA cc;
public void useCC(){
cc.methodAvailableForClassA();
}
}
public class ClassB{
private final RoleForB cc;
public void useCC(){
cc.methodAvailableForClassB();
}
}
这里的主要警告是CommonClass
不应仅仅是各种不相关功能的倾销场所。它需要保持凝聚力,所以你只应该出于正当的理由这样做。其中一个示例可能是为CommonClass
提供ClassA
的只读接口和ClassB
的只写接口。另一件需要注意的是,所涉及的接口不应该仅仅针对ClassA / B用例进行定制,否则任何松散耦合都是纯粹的虚幻。