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

How do I reference the object being created?

在构建我的 FXMLDocumentController class 的过程中,我需要使用一个 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 如何在实现中引用我的新 class?

删除强制转换和this,它是指父方法的明确调用:

setId("id");

仔细查看您的使用方式setText(name);。该方法来自 Labeled,但您既没有使用 this 也没有将其转换为 class,只是因为没有必要。 ListCellLabeled 也是 Node

代替 (Node)this 使用 Node.this。可以通过调用OuterClass.this.

获取外层class的当前对象

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

(OuterClass.this).methodOfOuterClass();

在这里,正如我所看到的,您在初始化方法中使用了 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 不视为匿名 class。所以 lambda 函数的范围仅限于那个特定的封闭闭包。 this 仅供参考。所以你不能在 setCelFactor lambda 中写 this.setId('Id'); 因为它不包含 setId 方法。

此处 lambda 被视为父 class 的子 class。在你的例子中,它的子 class of FXMLDocumentController 所以它可以访问父 class 的所有 public 方法所以你可以直接使用 setID 或其他方法没有任何参考。