Java对其他类的独占方法

时间:2015-12-13 19:09:43

标签: java class methods

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();
  }
}

我要问的是,是否有办法为某些类提供方法

3 个答案:

答案 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)

这是X/Y Problem

你问的是错误的问题,你问的是一个不合适的解决方案而不是问题。

您应该保留本地化为特定类专门化的方法或具有该实现的接口实现。

这被称为High Cohesion and Loose Coupling

你正试图与这两件事完全相反,这不是一条好路。

任何时候你都有像CommonClass这样的东西,你就会在完全不相关的东西上创造一堆混乱的依赖。

解决方案:

那些专门用于这些类的方法应该由那些使用它们的类拥有

答案 2 :(得分:0)

正如其他地方所提到的,你应该寻找松散耦合 - 只要ClassAClassB都知道CommonClass你有强耦合代码,而你'我遇到了这种问题。但是,如果您拆分出代表CommonClass可能扮演的各种角色的单独接口,那么您可以将CommonClass的实例传递给ClassAClassB中的每一个,但作为实例单独的角色,只给客户端类访问特定的方法。

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用例进行定制,否则任何松散耦合都是纯粹的虚幻。