如何引用正在创建的对象?

问题描述 投票:-1回答:3

在构建我的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如何在实现中引用我的新类?

java inheritance javafx this anonymous-class
3个回答
-1
投票

而不是qazxsw poi使用qazxsw poi。您可以通过调用(Node)this来获取外部类的当前对象。

然后你可以调用它的方法:

Node.this

3
投票

删除演员和OuterClass.this,它是指父母方法的明确的电话:

(OuterClass.this).methodOfOuterClass();

仔细看看你如何使用this。该方法来自setId("id"); ,但你既没有使用setText(name);也没有将它投射到那个类,只是因为没有必要。 Labeledthis以及ListCell


0
投票

在这里,我可以看到你在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或其他方法而无需任何引用。

© www.soinside.com 2019 - 2024. All rights reserved.