类似于这个问题...
你在 Java 代码中发现的最糟糕的实践是什么?
我的发现有:
- 在 servlet 中使用实例变量(这不仅是坏实践,事实上它还可能导致错误)
- 使用像 HashMap 这样的集合实现,而不是使用适当的接口
- 使用看似难以理解的类名,比如 SmsMaker(SmsFactory)或 CommEnvironment(CommunicationContext)
类似于这个问题...
你在 Java 代码中发现的最糟糕的实践是什么?
我的发现有:
我需要维护Java代码,其中大部分异常处理方式如下:
catch( Exception e ) {}
catch(Throwable th) { logger.log("something went wrong"); }
。 - Alan我曾经遇到过“单例”异常:
class Singletons {
public static final MyException myException = new MyException();
}
class Test {
public void doSomething() throws MyException {
throw Singletons.myException;
}
}
每次抛出的异常实例都相同...具有完全相同的堆栈跟踪,与真实代码流程无关 :-(
以下是六个非常糟糕的例子:
System.exit
退出程序而不经过警告。例如:if(properties.size()>10000) System.exit(0);
会深埋在一个库中。synchronized("one") { }
。synchronized(object) { object = ...; }
。try { Integer i = null; i.intValue(); } catch(NullPointerException e) { e.printStackTrace(); }
。new Integer(text).intValue()
或更糟糕的是new Integer(0).getClass()
if{
if{
if{
if{
if{
if{
if{
if{
....
我讨厌人们只是为了把一组常量挂在上面而创建接口:
public interface InterfaceAntiPattern {
boolean BAD_IDEA = true;
int THIS_SUCKS = 1;
}
—接口用于指定行为契约,而不是用于包含常量的方便机制。
if (BAD_IDEA)
而不是 if (ConstantsClassPattern.BAD_IDEA)
,而无需扩展 InterfaceAntiPattern
。请注意,此处的翻译将保留英文原文中的专业术语和代码片段。 - David Moles这并不仅仅与Java相关,而是指在知道结果不会改变时,反复调用一个昂贵的函数而不是将结果存储起来的情况。例如:
if (expensiveFunction() > aVar)
aVar = expensiveFunction();
for (int i=0; i < expensiveFunction(); ++i)
System.out.println(expensiveFunction());
最糟糕的Java编程实践之一:全局可变状态(Global mutable state)。
荒谬的面向对象狂热者们,追求层次结构超过10级。
这就是像DefaultConcreteMutableAbstractWhizzBangImpl
这样的名称产生的原因。试着调试这种代码-你将在类树上上下翻飞数小时。
我们的实习生使用static
修饰符来存储Seam应用程序中当前登录的用户。
class Identity{
...
public static User user;
...
}
class foo{
void bar(){
someEntity.setCreator(Identity.user);
}
}
当然,在他测试时它是有效的 :)