我想写一个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/