java - 是否有任何工具/软件可以从 C++ 移植到 Java

标签 java c++

您好,我们有一个用 C++ 编写的项目/产品。现在我们计划将其转换为 Java 以获取 Java 的优势。

是否有任何工具可用于执行此移植?最好的开始方式是什么?

最佳答案

我见过一些自动代码转换的尝试,虽然它在技术上可以“工作”,但生成的代码通常完全无法维护。主要问题是:

  • 有些概念翻译不干净,需要一些极其困惑(而且通常很慢!)的解释或包装器才能获得相同的结果。
  • 优秀的 Java 代码在结构和风格上与优秀的 C/C++ 代码截然不同。如果您自动翻译代码,您最终会得到目标语言中非常不惯用的结构和风格,随后很难理解/维护。
  • 有些代码根本无法翻译(例如,C/C++ 中一些更神秘的内存管理代码根本无法在 Java 内存模型中完成)。这会破坏任何自动翻译,需要完全重写。

因此,我建议分段转换,而不是尝试使用工具转换整个产品。例如,您可能会采用以下方法

  • 首先创建一个 Java 应用程序(或网络应用程序)作为 C/C++ 代码的“包装器”。此时可以只是一个简单的界面。
  • 找出如何执行 Java <-> 调用(提示:JNI)
  • 使用JNI 调用C/C++ 代码作为黑盒“引擎”。
  • 编写大量 JUnit 测试来检查您是否获得了预期的结果。这不仅通常是一种很好的做法,而且会在您进行 future 的转换步骤时极大地帮助您避免错误。
  • 随着时间的推移,将 C/C++ 组件转换为 Java。将对这些组件的每个 JNI 调用替换为对某些 Java 代码的调用,这可能会根据需要对剩余的 C/C++ 代码库进行较低级别的 JNI 调用
  • 利用每个翻译步骤来重构您的代码。定义清晰的基于服务的接口(interface),减少重复,使事物不可变等。

关于java - 是否有任何工具/软件可以从 C++ 移植到 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4757793/

相关文章:

c++ - 如何将数组传递给函数?使用 C++ 作为 OO 类

java - 将 csv 文件上传到服务器,然后从中读取

java - Java程序中的错误代码401

c++ - 将派生类对象存储在基类变量中

c++ - Markov C++ 读取文件性能

c# - C# 运行时导入失败中的 C++ 非托管 DLL

java - Mule:防止 groovy 组件覆盖 payload

java - 测试重新部署 Web 应用程序时是否存在内存泄漏

java - HSSFCell - 确定什么类型的数字

c++ - 链表不打印值?我究竟做错了什么