从.NET转向Java

18

可能是重复问题:
从C#转向Java的技巧?

作为一名相当有经验的.NET开发人员(自1.0以来),我在本地地区看到了许多主要关注Java EE、ESB、WebSphere、JSP等技术的有趣职位。现在,我对大多数.NET技术都很熟悉,但Java对我来说是个谜。我在大学时做过一些J2SE编程(大约是2003年左右),但此后没有太多接触。

有没有人做过类似的转变(或者相反的情况),可以分享一些信息、注意事项,无论什么都行!.NET和Java技能集有多相似,一个人能够多容易地进行转换呢?


你到目前为止使用了哪些搜索词? - Thorbjørn Ravn Andersen
相关:https://dev59.com/kXVC5IYBdhLWcg3wcgmd - Joachim Sauer
基本上,我正在寻找整个事物之间的基本差异,而不是C#和Java之间的语法差异。例如,在.NET中,EJB与什么相关? - Jamie
这可能是一个很好的问题,作为一个独立的问题。 - Shog9
请查看http://www.codingthearchitecture.com/2009/03/30/java_for_net_developers.html。 - Zaki
5个回答

8
我曾经遇到过相反的问题:从Java EE转向.NET。
在两种语言之间映射语言结构方面,我并没有太大的麻烦。在一种语言或另一种语言中找出关系数据库访问并不困难。循环是循环,条件判断是条件判断,孩子们。这方面没有什么问题。
我读过Jon Skeet的《C# In Depth》,所以我对一些超越Java的好东西有了欣赏:LINQ、闭包、委托等。
我的问题更多是与其他细节有关的。
Visual Studio对我来说是个谜。我习惯于使用IntelliJ。ReSharper有所帮助。但像任何其他IDE一样,在你熟悉它之前,你会在新系统上试图将你在另一个系统上熟练掌握的东西映射到新系统上。Visual Studio Express似乎不是同一件事。
我也不知道如何组织、打包和部署应用程序。我对.NET模块、将应用程序部署到IIS而不是像WebLogic这样的Java EE应用程序服务器等方面一无所知。
在我的Java项目中使用JUnit和TestNG是第二天性。我对NUnit没有同样的舒适感。
我只是没有把它放在手指尖上。就像一个拿着语言指南的外国人:“我该怎么说?”我只是不熟悉.NET。
我真的需要一个好项目和一个有经验的指导者一起工作一个月,帮助我克服难关。但这不是我的项目角色,所以我束手无策。
我更喜欢用Python走同样的路线。我有JetBrains的PyCharm,所以IDE不是问题。Python模块像我习惯使用的第三方开源软件一样丰富易用。我有一本很棒的书《Core Python》正在引导我前进。而且我越用这种语言,就越喜欢它。我有同样的打包和部署问题,但我更有信心自己用Python解决问题,而不是用.NET。

只是一点提示:完整的Visual Studio内置了非常好的单元测试功能。您只需右键单击一个方法,点击“创建测试”,它就会在一个单独的项目中为您创建测试。如果该方法是私有的、受保护的或内部的,它甚至会为其创建一个访问器对象,使得单元测试可以访问所有方法,就像它们是公共的一样(这有时非常方便,可以节省编写子类来测试受保护方法的麻烦)。我在开始使用这些单元测试后使用了NUnit,但与之相比,NUnit感觉笨拙。 - user253984
即使有向导,你仍然需要在方法中添加实质内容。如果你的向导只提供“快乐路径”测试,我认为它是在对你不利。有时候迷恋向导的人应该退后一步。 - duffymo
Visual Studio是世界上最好的编辑器之一,对于你来说可能还有些神秘,因为你对它非常陌生。你还可以添加resharper插件,这将为其增加更多技术能力,但VS 2013和现在的VS 2014已经装载了大部分额外的工具。 - Ambuj
ReSharper是JetBrains的另一款产品。我与之合作的.NET开发人员中没有一个会在没有ReSharper的情况下使用Visual Studio,因此我认为他们还有很长的路要走才能赶上JetBrains。 - duffymo

4
在我看来,从语言角度来看,Java和.NET(C#)之间的区别并不大。虽然我更多地使用Java而不是C#,但我经常同时使用两者。
问题更多地出现在平台和类库上,它们具有不同的结构,并为相同的事物提供有时不同的概念。在我看来,主要问题在于.NET更多地受到直接来自Microsoft的捆绑/供应商库的驱动,而在Java平台上,大多数库和框架来自于平台外部来源。
因此,在这方面最好的方法是查看您在.NET中解决的常见问题,并尝试在Java中解决它们的一部分,以了解那里使用的库和框架。
另一个平台之间的不同之处可能是在Java EE环境中的应用服务器的概念,因为我认为.NET没有等效的概念来托管应用程序。
关于IDE的附注
特别是在重构支持方面,您会发现Eclipse、IntelliJ、NetBeans中的Java工具比Visual Studio开箱即用的功能更丰富。尽管ReSharper似乎为Visual Studio添加了许多缺失的功能。

而且 IntelliJ 比 Eclipse 和 NetBeans 都更加强大。ReSharper 则填补了 Visual Studio 的这一差距。 - duffymo
我已经将其添加到我的答案中。 - Johannes Wachter

2
只要避免复杂的类加载器交互,Java语言和标准库应该会感觉很熟悉。对于来自微软公司的人来说,可能会感到有些令人生畏的是,Java拥有大量的库和中间件选项。虽然语言很简单,但生态系统非常深入,没有真正的标准选择。
我建议关注J2EE教程中的“标准”技术,适用于大多数企业。但如果你成为项目的技术负责人,就需要准备花费大量时间研究最佳工具集。

1

我最近也进行了这个转换。像你一样,我从1.0开始就使用.NET编程。花了我几周时间才真正适应 - 但归根结底,从C#来看,这并不是很困难。最初最令人困惑的事情是从基于.NET委托的事件处理范例转向Java基于接口的事件处理范例。你会没问题的。

关于IDE - 我仍然更喜欢Visual Studio而不是Eclipse,但每个人都有自己的意见。Eclipse拥有大量功能,并且可以扩展,但我更关心每天使用的基本功能。在我从Visual Studio切换到Eclipse后,我从未意识到我写了多少代码使用TAB键。我真的很想快速自动完成。如果有一种方法可以在Eclipse中打开类似的功能(而不是输入CTRL-SPACE-> ENTER),请告诉我。:)

祝你好运! :)


0
我建议您从一个类似于.NET的架构开始,比如像ASP一样的JSP或类似于Java Server Faces的JSF,并开始一个小项目。这样,您就不需要太担心概念问题,而更多地关注语言差异、IDE、部署以及其他相关事项。然后,您可以尝试进入一个适当的J2EE应用程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接