如何从没有实例的其他类调用方法?

时间:2013-03-22 13:50:48

标签: java oop gwt

如何从不是另一个类中的对象的类调用方法,并且与其他类没有任何共同之处?

就我而言:

class GridUI {
    com.google.gwt.user.cellview.client.DataGrid grid;

    public void refresh() {
         dataGrid.redraw();
    }
}

class SomeBackendService() {
   public foo() {
      //have to trigger refresh of a specific grid
   }
}

一种可能性是制作refresh()grid static。但这是糟糕的设计,我不能使用这种方法,因为我想使用GridUI的几个实现。

那么,如何从不包含此网格作为对象的任何服务中刷新我的应用程序中的某个网格类?

3 个答案:

答案 0 :(得分:4)

只需在服务中为其创建并触发Event,然后为Event注册网格。最好使用EventBus

使用接受的答案中建议的静态Map<String, Grid>将起作用,但这不合适。您冒着犯错的风险,当网格数量增加时,管理起来并不容易。

EventBus方法是更多的工作,但最终它是一种更好的方法。您将能够在整个应用程序中重用EventBus。它确实有助于保持你的耦合。您也可以轻松地在不同的Event上轻松地使用不同的对象。

答案 1 :(得分:0)

或者创建组件注册表(基本上是Map<String,Grid>),然后使用其id作为注册表中的密钥从SomeBackendService获取网格。 (我想你知道要刷新哪个网格,对吗?)

注意注册管理机构:

  • 如果需要,确保它们是线程安全的(在UI应用程序中可能是真的)
  • 如果处理不当,他们往往会填满并泄漏内存

答案 2 :(得分:-2)

很抱歉没回答那么长时间,我正在度假。

接口是某种类。 但是他们没有实现任何方法,他们有空的方法体。

实现接口的每个类通常必须实现其方法。

在C#中你会这样做:

enter code here

    interface IMyInterface
    {
       void PleaseImplementMe();
    }


    class clMyInterface :IMyInterface
    {

        void  IMyInterface.PleaseImplementMe()
        {
            MessageBox.Show("One implementation");
        }    
    }





end

请让我知道,这是否可以帮助你。