c# - Sharpen Eclipse - 无法贴图 - super 引用

标签 c# java eclipse sharpen-tool

我正在尝试使用 Eclipse 中的 Sharpen 将 java 项目(完整源代码)转换为 C#

我遵循了此博客中的指南,效果非常好:http://tumblr.com/ZVuYOwDv6mdu (建议使用 Lluis Sanchez 的 Sharpen 编译版本而不是源代码控制)

但是我在一些扩展 ByteArrayInputStream 和 ByteArrayOutputStream 的类中遇到错误。任何对“super”的属性和方法的引用都会返回“无法映射”

示例:

[exec] ERROR: /sharpened/src/com/netnumber/dns/message/DnsOutputStream.java:176: failed to map: 'this.nameTable.put(name,new Integer(super.count))' [exec] java.lang.IllegalArgumentException: /sharpened/src/com/netnumber/dns/message/DnsOutputStream.java:176: failed to map: 'this.nameTable.put(name,new Integer(super.count))'

我想知道通过 Sharpen 是否有任何简单的解决方案,或者我是否必须花时间重新编写 java 代码(多个代码文件)以“模仿”引用而不使用扩展,然后编写最终转换后的代码项目中使用 MemoryStream 的 C# 代码?

最佳答案

我做了一个很简单的测试,下面的转换确实会失败:

public class DnsOutputStream extends ByteArrayOutputStream {
  public int count() {
    return super.count;
  }
}

具体的错误消息表明不支持访问父类(super class)中的字段:

 [exec] Caused by: java.lang.IllegalArgumentException: /sharpened/src/DnsOutputStream.java:16: super.count
 [exec]     at sharpen.core.CSharpBuilder.notImplemented(CSharpBuilder.java:243)
 [exec]     at sharpen.core.CSharpBuilder.visit(CSharpBuilder.java:227)
 [exec]     at org.eclipse.jdt.core.dom.SuperFieldAccess.accept0(SuperFieldAccess.java:165)
 [exec]     at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2514)
 [exec]     at sharpen.core.CSharpBuilder.mapExpression(CSharpBuilder.java:3343)

另一方面,如果我用 super.size() 替换 super.count,Java 代码将成功转换为以下 C# 代码:

public class DnsOutputStream : ByteArrayOutputStream {
  public virtual int Count()
  {
    return base.Size();
  }
}

总之:Sharpen 不支持访问父类(super class)中的字段。但是,支持访问父类(super class)方法。当父类(super class)字段有适用的替换时,可以在转换之前修改 Java 代码以使用替代结构。

关于c# - Sharpen Eclipse - 无法贴图 - super 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8719863/

相关文章:

java - Selenium 远程驱动程序 - 在实现 InternetExplorerDriver 期间发生 NoSuchElementException

java - 线程异常 "main"尝试运行 TestNG 类时 Eclipse 出错

c# - Prism 事件聚合器。接收事件并再次发送

c# - Entity Framework Code First 一对一关系

java - 对可调用执行器进行单元测试

java - 我们可以制作两个启动器 Activity 并根据某些条件启动一个吗?

Android 模拟器的音频停止工作

c# - 有没有办法将进程的当前WorkingSet扩展到1GB?

c# - 按照简单模式初始化 N 个数字数组的最简单方法是什么?

java - 在java中将普通sql转换为参数sql