- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试用java做一些“简单的事情”,在javascript中看起来像这样:
// Main class
var model = new Model();
this.callback = function(e){/* do something */}
model.addListener("change", callback);
在java中,到目前为止我发现Main类从java.util.Observer派生,Model从java.util.Observable派生;然后,当模型调度事件时,它将调用 Main 类上的 update 方法。我发现真的很丑而且一点也不优雅。我什至无法想象如何使用它;
有没有更干净、灵活的方法,也许有一些库可以帮助我,因为我还没有找到任何可接受的关于如何这样做的教程?
非常感谢
到目前为止我所管理的,我非常喜欢它,而不是仅仅为简单事件创建“空”类(但仍然不好,至少对我来说):
private ArrayList __items;
public void addListener(Method method, Object object){
this.__listeners.add(new Object[] {method, object});
}
public void dispatch(){
int i = this.__listeners.size();
Method method;
Object context;
while(i>0){
i--;
method = (Method)(this.__listeners.get(i))[0];
context = (Object)(this.__listeners.get(i))[1];
try{
method.invoke(context);
}catch(java.lang.reflect.InvocationTargetException e){
}catch(java.lang.IllegalAccessException e){
}
}
}
然后我这样使用:
Gifts gifts = prendastotty.PrendasTotty.getMain().getLoggedUserGifts();
Class[] parameterTypes = new Class[0];
try{
Method m = Home.class.getMethod("__updateTable", parameterTypes);
gifts.addListener(m, this);
}catch(NoSuchMethodException e){
}
这有漏洞/反模式/有缺陷吗?
最佳答案
我必须说,我在跟上你的代码时遇到了一些麻烦,因为在我看来,有些东西没有意义(从 Java 的思维方式来看,或者至少我的) Java 的思维方式)。所以我希望我能正确理解您的意思并能帮助您。
让我们首先举一个简单的例子:
var model = new Model();
this.callback = function(e){/* do something */}
model.addListener("change", callback);
例如,在 Java 中,一个好的方法是:
public interface ModelListener {
public void execute(Model context);
}
public class Model {
private List<ModelListener> listeners;
public Model() {
this.listeners = new ArrayList<ModelListener>();
}
public void addListener(ModelListener listener) {
this.listeners.add(listener);
}
public void dispatch() {
for (ModelListener listener: listeners) {
listener.execute(this);
}
}
}
通过这种设计,您现在可以执行以下两件事之一:
在 Java 中,最常见的情况是所有类都有一个名称,尽管在某些情况下您可以创建匿名类,但这些类基本上是是内联实现的。由于它们是内联实现的,因此它们通常只是在它们很小的时候使用,并且知道它们不会被重复使用。
示例:
Model model = new Model();
model.add(new ModelListener() {
public void execute(Model model) { /* do something here */ }
});
请注意如何创建新的 ModelListener
对象(它是一个接口(interface))以及如何内联提供 execute
实现。这就是匿名类。
您可以创建实现您的接口(interface)的类并使用它们而不是匿名类。当您希望监听器可重用、具有为代码赋予语义含义的名称和/或它们的逻辑不仅仅是几行代码时,通常会使用此方法。
示例:
public class LogListener implements ModelListener {
public void execute(Model model) {
// Do my logging here
}
}
Model model = new Model();
model.addListener(new LogListener());
旁注
作为旁注,我看到您尝试绑定(bind)为监听器的方法称为 __updateTable
您是否有机会尝试检测对象的更改,以便可以将它们提交到数据库?如果是这样,我强烈建议您看一些ORM框架如Hibernate或JPA他们会为您免除所有麻烦,跟踪更改并将其提交到数据库。
希望它能有所帮助,来自葡萄牙 StackOverflow 用户的问候;)
关于java - 我是来自 javascript 背景的 java 新手 : how do they manage event listeners properly and not tighting classes together?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13753300/
我有一个数据文件,我想创建一个 pm3d map 点阵。代码: set term pngcairo size 800,600 set out "test.png" set pm3d map splot
这句话我听过很多次了。这是什么意思? 举个例子会有所帮助。 最佳答案 来自Wiktionary : (计算)在汇编语言中,包含少量指令并迭代多次的循环。 (计算)此类循环大量使用 I/O 或处理资源,
具有键/值对“紧密”重复模式的字符串(对于此示例,键是“name”,值应该是单个小写单词) string text = "name: abc name: def name: ghi name: jkl
这是我的 HTML 的结构: Some text Not much text Some text Not much text Some text Not much text 我有三个
我经常使用 matplotlib 生成单个图形,这些图形应该垂直或水平对齐,例如在 LaTeX 文档中。我的目标是: 避免在所有图中留出过多的边距或剪裁。对于独立图形,这可以通过使用 bbox_inc
好的,所以我在这里被观察者模式困住了,我读过的几乎所有教程都告诉主题类订阅观察者。 但是考虑到封装,这怎么能不紧密耦合呢?他们仍然相互依赖,不是吗? 我的意思是,subject Class必须知道观察
根据documentation , ax.autoscale(tight=True) 应该 If True, set view limits to data limits; 与 ax.axis('ti
似乎 savefig 中的 bbox_inches='tight' 选项忽略了没有文本的注释。这是我的示例代码 import matplotlib.pyplot as plt fig = plt.fi
我正在尝试创建我的网页,但我遇到了 float 问题。 这是我的 HTML 代码: InformacjeAutokoder.pl jest obecnie najbardziej innowa
我有一个程序可以将其进度打印到控制台。每 20 步,它会打印步数,例如 10 20 30 等,但在此范围内,它会打印一个点。这是使用末尾带有逗号的 print 语句打印的 (python 2.x)
当您在 Matplotlib 的 savefig() 函数中设置 bbox_inches = 'tight' 时,它会尝试找到封装图形窗口中所有内容的最紧密的边界框。不幸的是,最紧密的边界框似乎包含不
我在 ipython 笔记本中使用以下代码将条形图保存为 .png 文件: plt.savefig(文件名, bbox_inches='tight') 它在我的电脑上运行,我试过在另一台电脑上运行脚本
我必须绘制一个矢量图,我只想看到没有轴、标题等的矢量,所以我尝试这样做: pyplot.figure(None, figsize=(10, 16), dpi=100) pyplot.quiver(da
你能给我解释一下下面的短语(摘自 an answer to Stack Overflow question What are the differences between Deferred, Pro
我正在开发一个 WordPress 插件,并努力确保最佳实践。我有两个类,我的插件类“Jargonaut”是必需的,然后是另一个名为“Dictionary”的类,它随 require_once() 包
我一点也不擅长设计,我只是想在 Bootstrap 4 中进行简单的表单对齐;我根本没有做任何定制,只是很乐意接受框架给我的任何东西。 我已经通读了表单文档,变体的数量非常困惑,到目前为止,我尝试的一
我在尝试通过我的数据拟合平均曲线以求出长度时遇到了问题。我在一个 Pandas 数据框中有很多 X、Y 点,看起来像这样: x = np.asarray([731501.13, 731430.24,
我下载了 Enhanced Tight VNC Viewer ( http://www.karlrunge.com/x11vnc/ssvnc.html ) 并按照说明将我本地机器(运行 Win 7)上
本文整理了Java中com.sun.msv.datatype.xsd.WhiteSpaceProcessor.tightness()方法的一些代码示例,展示了WhiteSpaceProcessor.t
我正在制作一个嵌入 latex 中的出版物质量图,我希望在大小和字体方面非常精确(以便文章中的字体与图中的字体大小相同)。为了防止绘图在 latex 中缩放,我想要它的确切尺寸,但我不能。这是我的代码
我是一名优秀的程序员,十分优秀!