繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM