我认为标题本身就说明了 - 为什么我应该编写一个接口,然后实现一个具体的类,如果只有一个具体的实现该接口?
我很欣赏TDD,并认为它是必不可少的,但只有在我编写源代码然后重构之后才能编写我的测试.我永远不会让自己先写测试然后通过测试来源.所以我总是扭转这个过程.这对我来说是不好的做法吗?和我一样反向做的有什么缺点?
我将实现一个功能,在Hibernate删除后更新表中的id.但我希望得到一些关于哪种方法更好的反馈.我正在更新值的表,Hibernate不知道它,所以我将不得不做一个直接的jdbc更新 - 是甚至可能.
我最初认为静态块是静态变量,但编译器允许A和B编译和运行,是什么给出的?
一个
private static final Map<String,String> m = new HashMap<String,String>();
{
m.put("why", "does");
m.put("this","work");
}
Run Code Online (Sandbox Code Playgroud)
乙
private static final Map<String,String> m = new HashMap<String,String>();
static{
m.put("why", "does");
m.put("this","work");
}
Run Code Online (Sandbox Code Playgroud)
运行System.out.println(Main.m.toString());了一个打印
{}
但在Yoda-speak中为B打印出同样的效果
{this = work,why = does}
只是想知道这个和其他相关的函数是否是那些不应该被打扰的东西之一,只是去了Long a = 1L; 简单明了.
我最近有一个关于字符串和字符串实习的问题 - 非常简单的问题我得到了快速回答.但是,看到我在pg上得到了同样问题的详细答案.所述JLS 3的29 次版.这真是有趣的是,很多我们所提出的问题在JLS的回答,但它的这么无聊的600页读取(4 个版是更大).你们有多少人最近为了一个悠闲的阅读而拿起了JLS?
我看到这个初始化实例变量的习惯很多
public class Test{
private Long l = 1l;
private MyClass mc = new MyClass();
public Test(){}
...
}
Run Code Online (Sandbox Code Playgroud)
但我更愿意
public class Test{
private Long l;
private MyClass mc;
public Test(){
l = 1l;
mc = new MyClass();
}
...
}
Run Code Online (Sandbox Code Playgroud)
考虑到这些是非最终变量,在线程安全方面,2种方法是等效的还是比另一种更"正确"?
我试着产生正确的UML的时候,我们有我们的设计/白板会议,但我试图在结构良好的UML ALWAYS降解成UML的前瞻性,但是,可以理解到这些,在最房间有-A-小的解释.但这对于完美的工程师来说是否足够好呢?您是否总是在白板会话中生成结构良好的UML?对于那些可能认为不重要的开发人员,你有什么建议,以免他在设计模式书中看到它并且不知道wtf正在发生.
最近我听说Kirk Pepperdine谈到改变垃圾收集器以获得更好的性能 - 但究竟是什么意思以及是什么让一个垃圾收集器比另一个好或不同?
在我写完标题之后,我读了这篇SO 帖子,但仍然决定在Java中讨论有关bug的bug实现问题.这是我的正常实施
@Override
public boolean equals(Object o){
if(o == null) return false;
if(o instanceof CompositePk == false) return false;
if(this == o) return true;
CompositePk that = (CompositePk)o;
return new EqualsBuilder().append(this.id, that.id)
.append(this.bucketId, that.bucketId)
.isEquals();
}
Run Code Online (Sandbox Code Playgroud)
使用Apache的EqualsBuilder来完成平凡的事情.比这更容易的是我的Netbean自动生成的equals(o)实现
@Override
public boolean equals(Object obj){
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final TemplatesWrapper other = (TemplatesWrapper) obj;
if (this.timeAdded != other.timeAdded && (this.timeAdded == null || !this.timeAdded.equals(other.timeAdded))) {
return false; …Run Code Online (Sandbox Code Playgroud) java ×6
equals ×1
hibernate ×1
interface ×1
performance ×1
tdd ×1
testing ×1
uml ×1
whiteboard ×1