繁体   English   中英

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

[英]How to call methods from other classes not having an instance?

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

就我而言:

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几个实现。

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

只需在您的服务中为它创建并触发一个Event ,并使您的网格注册该Event 最好使用EventBus

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

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

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

但要注意注册表:

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

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

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

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

在C#你会做:

enter code here

    interface IMyInterface
    {
       void PleaseImplementMe();
    }


    class clMyInterface :IMyInterface
    {

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





end

请告诉我,这是否可以帮到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM