我经常在编码时做这样的事情:
getNamedJdbcTemplate().update(sql, new MapSqlParameterSource() {
{
addValue("a", obj.getA());
addValue("b", obj.getB());
addValue("c", obj.getC());
}
});
或者
getJdbcOperations().queryForObject(sql, new Object[] { id}, new RowMapper<Obj>(){
@Override
public Obj mapRow(ResultSet rs, int rowNum) throws SQLException {
// TODO Auto-generated method stub
return null;
}});
我还使用Java方法大量使用Inner类。
当然,如果我更多地使用代码,那么我将把它放在另一个类上,这样我就可以重复使用了...问题是我的队友不喜欢这个,没有人能够给我正当理由为什么不......
他们谈论了很多关于内存泄漏和垃圾收集(GC)的内容,但我相信这些都是过去的内容。 我正在使用Java6和Spring 3.应用程序部署在Tomcat 6服务器上。
答案 0 :(得分:1)
我可以考虑使用双支撑初始化以及基本上任何匿名类的一些缺点:
更多内存消耗 - 每次编写new A() { }
时,你基本上都会创建一个新的匿名子类A,它必须由类加载器加载,因此会消耗一些内存。但我要说的是,虽然这对于某些内存消耗至关重要的应用程序很重要,但对于绝大多数程序(尤其是服务器端程序)而言,Java类内存开销非常小,我甚至不考虑它
创建匿名子类可能会导致许多依赖于反射的框架和库出现意外问题。如果它不期望存在子类,它也可能会使equals()
方法跳闸。例如,想一想如何序列化和反序列化实例new A() { int x = y; }
? new A() {{ a = 7; }}
是否等于new A() {{ a = 7; }}
(假设他们的等级分别为A $ 5和A $ 9)。第四。
但除此之外,我没有看到这样做的任何其他缺点。上述两个问题仅在某些情况下出现,并且可以在需要时轻松修复或解决。
一般来说,我也更喜欢一次性使用匿名类,我也做了很多双括号初始化,因为它使代码更好,更结构化,更容易阅读。
P.S。我的一些同事也在吼叫我:D