[英]How do I reference the object being created?
在构建FXMLDocumentController类的中间,我需要使用一个lambda表达式来创建带有一些@overrides的新对象,因为@overrides我需要引用我的对象,该怎么做?
public class FXMLDocumentController implements Initializable {
@Override
public void initialize(URL url, ResourceBundle rb) {
listViewArtigosMercado.setCellFactory((ListView<String> param) -> new ListCell<String>(){
@Override
public void updateItem(String name, boolean empty){
super.updateItem(name,empty);
if (name.equals("Vender")){
setText(name);
((Node)this).setId("id");
}
}
});
}
}
我希望我的this
关键字是否将自身引用到我的新ListCell<String>
而不是FXMLDocumentController
如何在实现内部引用我的新类?
删除强制类型转换和this
,这是引用父方法的明确调用:
setId("id");
仔细查看您如何使用setText(name);
。 该方法来自Labeled
,但是您既没有使用this
也没有将其强制转换为该类,这仅仅是因为不需要这样做。 ListCell
是一个Labeled
以及一个Node
。
在这里,正如我所见,您在初始化方法中使用lambda
函数,如下所示。
listViewArtigosMercado.setCellFactory((ListView<String> param) -> new ListCell<String>(){
@Override
public void updateItem(String name, boolean empty){
super.updateItem(name,empty);
if (name.equals("Vender")){
setText(name);
((Node)this).setId("id");
}
}
});
Lambda不视为匿名类。 因此,lambda函数的范围仅限于特定的封闭对象。 this
仅是针对该特定范围的参考。 所以你不能写this.setId('Id');
在setCelFactor lambda内部,因为它不包含setId
方法。
在这里,lambda被视为父类的子类。 在您的情况下,其子类为FXMLDocumentController
因此它具有父类的所有公共方法的可访问性,因此您可以直接使用setID
或其他方法而无需任何引用。
由(Node)this
Node.this
使用Node.this
。 您可以通过调用OuterClass.this
获得外部类的当前对象。
然后,您可以调用它的方法:
(OuterClass.this).methodOfOuterClass();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.