java - 如何从 Java 代码生成 Go 代码?

标签 java go polymorphism

我想写一个Java2Go生成器,但我发现很难表达多态性(例如:形式arg是Base类,但真正arg是Sub类),如何在Go中表达blow代码?

class Base{
    public int i;     
  }

class Sub extends Base{ 
  }

class Test{
   public static int test(Base base){
          base.i = 99;
          return base.i;
   }
   public static void main(String [] args){
       Sub sub = new Sub();
       System.out.println(test(sub));
   }
}

最佳答案

您需要复制代码或制作调用通用实用函数的包装器,这基本上是疯狂的。

没有优雅的方法来进行“逐个函数翻译”。优雅的方法是以不同的方式编写程序。

Go 程序从根本上必须采用不同的结构。从多年编写面向对象代码的经验来看,这是一个很难改掉的习惯,但是当我找出“类似 Go”的方法来解决问题时,随着时间的推移,它通常会变得更简单。

拥有适当的继承和所有看起来可以保存代码并保持事物整洁的东西,但是 - 至少根据我的经验 - 经过多年的开发,它很容易最终变得像一团乱麻,或者至少很难深入研究,如果你有一段时间没有使用该代码了。

Go 的界面更加有限,但它会迫使你让事情变得更简单、更“明显”。不同类之间的分离是明确的。

还有一些优点;在您获得一些操作经验后,“混合”类型比继承要容易得多。另一个“技巧”是,例如,一种类型可以满足多个接口(interface)。

如果您一直在编写面向对象的代码,那么需要一些练习来适应新工具。我建议不要编写翻译器,而是尝试编写一些基于 Go 的工具。那一定会很好玩。 :-)

关于java - 如何从 Java 代码生成 Go 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20414375/

相关文章:

java - 在 Java 中创建 XML 文件的最佳方法是什么?

mysql - Golang sql命名参数查询

c++ - 动态绑定(bind)、静态绑定(bind)、函数指针、深层含义

c++ - 创建指向类对象的指针数组

java - JavaEE 中的配置管理

java - 在 eclipse 和 maven 中使用 slf4j 配置 WebApps

java - Gradle-bootstrap类路径未与-source 1.7一起设置

json - Golang解析输出以读取键(地形输出)

arrays - 将 json 对象的字符串编码到 json 数组中

java - 余额在 SavingsAccount1 中具有私有(private)访问权限,并且不允许我在FlexibleSavingsAccount1 中访问它