【发布时间】:2014-07-12 05:51:31
【问题描述】:
如果两个类在同一级别(都是子类),如何将一个类的实例用于另一个类。将一个类的实例用于另一个类而不传递给构造函数的最佳方法是什么? 所以手动要求传递 null。如何制作独立代码?
Class PreviewPanel{
private PreviewPanel(Builder builder) {
this.previewMode=builder.previewMode;
formsPreview=new NTFormsPreview(previewMode);
formsPreview.setCanAddComment(builder.canAddComment);
ntPreviewTreePanel=new NTPreviewTreePanel(builder,formsPreview);
//This class have some event bus implemented.Sometime There, formsPreview instance is require.
}
public static class Builder {
private PreviewMode previewMode;
private Document document;
public Builder(PreviewMode previewMode,Document document) {
this.previewMode = previewMode;
this.document=document;
}
public PreviewPanel build() {
return new PreviewPanel(this);
}
}
}
如果我将该实例传递给构造函数,我必须遵循内部类的链并传递相同的实例以到达特定的类。我想避免它。这是大产品。要显示其中有多少类可以到达实际的处理程序实现并不容易。
代码结构:
private PreviewPanel(Builder builder)
->formsPreview=new NTFormsPreview(previewMode);
->NTPreviewTreePanel(builder,formsPreview);
->NTPreviewTree(document, bidDocuments, previewMode, canAddComment,canViewComment, previewFormTxnEncryptionDetails,formsPreview);
->NTTreeNode(formsPreview)
private void fireReportItemClicked(Document document,esenderCSReport){
eventBus.fireEventFromSource(formPreviewEvent, formsPreview);
}
【问题讨论】:
-
您的问题不清楚。你想注入什么实例,在哪里注入? "As some time NTPreviewTreePanel is not required NTFormsPreview instance" 这句话充其量是模棱两可的。你能用明确的例子澄清一下吗?
-
有什么方法可以将一个类的实例用于另一个类而不将实例传递给构造函数?
-
你能不能只拥有一个你想在你设置的类上使用的类的公共属性?另一种选择是使用像 Unity 这样的 IoC 容器。
-
@JimGarrison 这与 gwt 事件总线查询有关。我使用了“eventBus.addHandler(type, handler)”处理程序。但它会触发不需要的事件,例如为同一类创建三个实例。如果我为一个班级触发事件,它会为所有三个班级触发。我发现解决方案“eventBus.addHandlerToSource”也可以传递实例(资源)。所以它会触发特定的实例。但情况并不总是一样。
-
为什么不做一个简单的查询演示呢?为什么要发布与查询无关的问题的额外材料? -1 出于这个原因。请仅使用查询所需的相关详细信息编辑问题。
public class A extends C就足够了,那么为什么用public class NTFormsPreview extends ScrollPanel让这个例子如此复杂,然后无缘无故地覆盖方法:(
标签: java gwt design-patterns