我正在将一些代码从C#转换为Java。我之前从未使用过C#,但到目前为止它已经相当容易了。
我在C#文件中有一行看起来像这样:
coverage.createMethod = delegate (Gridpoint gp){
//Some method stuff in here, with a return objecct
}
这究竟是做什么的?它似乎有点像内联类,但我不知道如何将htis转换为java
编辑:有关具体问题的更多信息
在名为STKDriver.java的文件中,我有以下内容
CoverageDefinitionOnCentralBody coverage = new CoverageDefinitionOnCentralBody(...);
.
.
.
DClass value = new DClass(STKDriver.class, "invoke", CoverageGrid.class);
coverage.setGridPointCreationMethod(value);
在填充DClass.java中,它扩展了CreateCoverageGridPointForAccess,我有以下内容:
public DClass(Class class1, String string, Class<CoverageGridPoint> class2{}
.
.
.
public IServiceProvider invoke(CoverageGridPoint gridPoint){
return something; //of the classtype Platform
}
这样做是否正确?类定义在这里链接:
请注意,CreateCoverageGridPointForAccess类是抽象的,并扩展了Delegate类。
我创建的这个实现看起来是否正确?如有必要,我可以写更多代码
答案 0 :(得分:3)
这是C#中的匿名方法。它在技术上与以下相同:
coverage.createMethod = new Func<Gridpoint, object>(SampleMethod);
public object SampleMethod(Gridpoint gp)
{
return thingy; // Pseudo for return value
}
这只是一个可以用来编码更少的快捷方式。
答案 1 :(得分:3)
Tejs的回答是正确的。但请注意,因为匿名函数可以使用闭包,这意味着使用外部函数中声明的现有局部变量,来自匿名委托。我不是Java程序员所以我不知道Java是否支持这个。
答案 2 :(得分:0)
coverage.createMethod
是代表。
以下代码创建一个匿名方法并将其分配给委托:
coverage.createMethod = delegate (Gridpoint gb) {
}
这样当有人调用coverage.createMethod时,你的匿名方法就会被执行。