在构建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
如何在实现中引用我的新类?
答案 0 :(得分:3)
删除强制类型转换和this
,这是引用父级方法的明确调用:
setId("id");
仔细查看您如何使用setText(name);
。该方法来自Labeled
,但是您既没有使用this
也没有将其强制转换为该类,这仅仅是因为不需要这样做。 ListCell
是Labeled
也是Node
。
答案 1 :(得分:0)
在这里,正如我所看到的,您在如下的initialize方法中使用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
仅用于该特定作用域的引用。因此您不能在setCelFactor lambda中写入this.setId('Id');
,因为它不包含setId
方法。
在这里,lambda被视为父类的子类。在您的情况下,其子类为FXMLDocumentController
,因此它具有父类的所有公共方法的可访问性,因此您可以直接使用setID
或其他没有任何引用的方法。
答案 2 :(得分:-1)
在(Node)this
中使用Node.this
。您可以通过调用OuterClass.this
来获取外部类的当前对象。
然后您可以调用它的方法:
(OuterClass.this).methodOfOuterClass();