如何引用正在创建的对象?
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,只是因为没有必要。 ListCell
是 Labeled
也是 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
或其他方法没有任何参考。
在构建我的 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,只是因为没有必要。 ListCell
是 Labeled
也是 Node
。
代替 (Node)this
使用 Node.this
。可以通过调用OuterClass.this
.
然后你就可以调用它的方法了:
(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
或其他方法没有任何参考。