在构建我的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
如何在实现中引用我的新类?
而不是qazxsw poi使用qazxsw poi。您可以通过调用(Node)this
来获取外部类的当前对象。
然后你可以调用它的方法:
Node.this
删除演员和OuterClass.this
,它是指父母方法的明确的电话:
(OuterClass.this).methodOfOuterClass();
仔细看看你如何使用this
。该方法来自setId("id");
,但你既没有使用setText(name);
也没有将它投射到那个类,只是因为没有必要。 Labeled
是this
以及ListCell
。
在这里,我可以看到你在initialize方法中使用Labeled
函数,如下所示。
Node
Lambda不会将其视为匿名类。因此lambda函数的范围仅限于特定的封闭关系。 lambda
仅供参考。所以你不能在setCelFactor 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");
}
}
});
,因为它不包含this
方法。
这里lambda被视为父类的子类。在您的情况下,它的子类this.setId('Id');
所以它具有父类的所有公共方法的可访问性,因此您可以直接使用setId
或其他方法而无需任何引用。