Java工程师应该注意的10件事

本文列举了Java开发中常被误解的十个实践,包括遍历结果集构建对象、事务系统中写PL/SQL、Swing应用程序的编写与调试、泛型使用、日期计算、SessionReplication配置、排序算法编写、自定义数据结构、日志框架选择及性能问题,旨在揭示这些常见做法背后的真实情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

William F. Buckley.Jr 曾经说过,“保守主义者是那些逆着历史潮流不断喊停的人,其他人都不愿意这么做或者对他们这么做显得没有耐性”。虽然我对此了解不多,但是每次看到有Java开发人员做以下事情或者我自己被迫做这些事情时,总想跳出来叫停。

1.遍历结果集并且构建对象

 
  1. while (result.next()) {
  2. String name = result.getString(“name”);
  3. String address = result.getString(“address”);
  4. String email = result.getString(“email”);
  5. String phone = result.getString(“phone”);
  6. stuff.add(new AddressEntry(name,address,email,phone));
  7. }

如果你是个时髦的开发者而不是专业人员,显然你从某篇博客中读过有开发者遇到Hibernate的“性能问题”,因而认为ORM都不好,觉得手动编码“明显更好”。喜欢的话你当然可以用JDBCTemplate之类,但是谢谢你的对它们的无端指责,我还会继续用我的JPA/Hibernate。

2.在事务系统中写PL/SQL

随着时间的推移,系统中的业务逻辑会被逐步迁移到关系数据库中,所有宝贵的设备交易都会迁移到数据库中去。有的人将它们转换为类似COBOL的处理方式,绑定到调用物化视图的触发器中。通过他们调用其它扁平化版本。简而言之,很快你会拥有一个极其难以控制的遗留系统。这对Oracle的投资者而言是好事,但对我们则不然。

3.编写Swing应用程序或者调试

多年来,我一直认为编写GUI代码是件非常可怕的事情,以至于我从不接触前端代码。Java看起来根本不应该和前端有什么关联,Swing效率很低。没错,如果你是开发NetBeans的前Sun员工,又不用担心浏览器,而且还有一堆内存空间可以尽情使用的话,确实可以写出很快的Swing代码来。否则Swing的确很慢。默认情况下Swing弄出一堆跟原生GUI动画一样的图形界面来,让人不爽。此外还有Java的沙箱模型。

4.Cast

Java Generics并非完美,但在处理问题时,我不会去优先选择它。有时总会有些边界情况使得泛型无法有效处理。例如,我实在不想再这么做:

 
  1. Foo bar = (Foo) FooFactory.get(“bar”);

不幸地是,有些库无法获得更新并且还会代码泄漏,但可以利用泛型来编写单元测试

5.使用Calendar或Date进行日期计算

使用JDK Date和Calendar类来处理复杂的时间/日期计算简直是在浪费生命,除了直观上的操作外,内置类仅提供了最原始的操作。大家可以使用像JODA Time这样的现代库来代替。除非你在x86汇编器上编写应用程序。在这种的情况下,你可能很享受使用JDK Date和日历进行计算。

6.配置Session Replication

所有的分布式缓存产品和项目已改为NoSQL的键值对存储方式重构。如果我们需要有状态的客户端,那就用AJAX/Javascript,而不是不使用HttpSession,可这样可以大大提高应用程序的可靠性和可扩展性。

7.写排序算法

这是最让人厌恶的,我是很少关注这些排序算法的。写排序代码的人要么是不知道Java已经提供了你所需的排序算法(或者自己写了个排序的第三方库文件),要么根本不知道Comparable和Comparator如何工作。现在,你可以深入地探讨一下,绝对是有益无害的。

8.写自己的链接列表、栈、堆等

诚然,写一个基础的链接列表相当容易,Wikipedia上就提供了这样的一个非常不错的页面,上面汇集了所有的链表代码。所以,我可以选择复制——粘贴。但还是比较喜欢(建议)使用数据结构,并且一直坚持。

9.编写自己的池、集合或者一般的并发代码

凡是知道Doug Lea的开发者肯定都很喜欢他。Doug Lea的java.utl.concurrent集合可以帮你解决很多并发性问题,另外,他还能提供非常好的解决方案。

10.处理日志框架

你用什么词来形容Commons logging、SLF4J之类?答案是:Suck!几年前Sun不肯简单地把Log4J的接口引入JDK,Oracle倒是可以把java.util.logging做得好点。我宁可大家都用java.util.logging这个烂标准,也不要有人搞出个伟大的其他日志候选项。这就像有人进行下面的对话:

“我有可口可乐”

“喝百事怎么样?”

“管它呢,反正喝了都胖,有区别吗?”

来自:DZone

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值