我可以使用哪些情况Collections.emptyMap()?文档说如果我希望我的集合是不可变的,我可以使用这个方法.
为什么我想要一个不可变的空集合?有什么意义?
在处理现实世界的货币价值时,我建议使用BigDecimal而不是Double.But我没有一个令人信服的解释,除了"通常是这样做".
你能否对这个问题嗤之以鼻?
据我所知,java.util.Hashtable同步java.util.Map接口中的每个方法,同时Collections.synchronizedMap(hash_map)返回一个包装器对象,其中包含将调用委托给实际的同步方法hash_map(如果我错了,请纠正我).
我有两个问题:
它与同步每个方法和包装类有什么区别?有哪些方案可以选择其中一种?
我们这样做会发生什么Collections.synchronizedMap(hash_table)?这是否等于简单地使用正常java.util.Hashtable?
什么是自然排序.假设我有一个Employee对象,其中包含姓名,年龄和加入日期,按自然顺序排序?
我有一个WAR文件.我想打开它,编辑XML文件,删除一些罐子,然后重新打包.
我使用WINRAR打开WAR文件,然后删除了一些Jars并在WinRar中执行了"添加到存档"并创建了一个WAR.
当我在jboss文件夹中部署WAR时,我得到了一个例外.
16:05:14,316 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2)
MSC00001: Failed to start service jboss.deployment.unit."myapplication.war".
STRUCTURE: org.jboss.msc.service.StartException in
service jboss.deployment.unit."myapplication.war".STRUCTURE:
Failed to process phase STRUCTURE of deployment "myapplication.war"
Run Code Online (Sandbox Code Playgroud)
我如何重新包装WAR?
我正在阅读有效Java中的序列化一章.
谁调用了readObject()和writeObject()?为什么这些方法被声明为私有?
以下是本书的一段代码
// StringList with a reasonable custom serialized form
public final class StringList implements Serializable {
private transient int size = 0;
private transient Entry head = null;
//Other code
private void writeObject(ObjectOutputStream s)
throws IOException {
s.defaultWriteObject();
s.writeInt(size);
// Write out all elements in the proper order.
for (Entry e = head; e != null; e = e.next)
s.writeObject(e.data);
}
}
}
Run Code Online (Sandbox Code Playgroud)
是否有任何特定原因将变量size声明为瞬态,然后在writeObject方法中显式写入?如果它没有被宣布为瞬态,那么无论如何都会写出来,对吗?
我在接受采访时被问到这个问题.我清楚地知道装饰器模式是什么以及如何使用它.但我在采访中无法思考这个问题.
这是实际问题.
AOP是装饰模式的变体吗?AOP实施与商标装饰模式有何不同?
我正在阅读有效Java中关于泛型的章节.
帮助我理解之间的区别Set,Set<?>以及Set<Object>?
以下段落摘自本书.
作为快速回顾,
Set<Object>是一个参数化类型,表示一个可以包含任何类型的对象的集合,Set<?>是一个表示一个集合的通配符类型,它只能包含某些未知类型的对象,并且Set是一个原始类型,它选择了泛型类型系统.
什么是"某种未知类型"?是所有未知类型的类型Object?在那种情况下,Set<?>和之间的具体区别是Set<Object>什么?
我正在阅读"Effective Java"中的序列化章节.我试图理解书中的下一段.
如果您实现的类具有可序列化和可扩展的实例字段,那么您应该注意这一点.如果类的实例字段初始化为其默认值(整数类型为零,布尔值为false,对象引用类型为null),则会违反不变量,必须将此readObjectNoData方法添加到类中:
// readObjectNoData for stateful extendable serializable classes
private void readObjectNoData() throws InvalidObjectException {
throw new InvalidObjectException("Stream data required");
}
Run Code Online (Sandbox Code Playgroud)
我不确定上述陈述的含义.
为了测试这个,我创建了一个Person类(可序列化和可扩展)
class Person implements Serializable{
private String name;
private int age;
Person() {
this("default",1);
}
Person(String name, int y) {
this.name = name;
this.age = y;
}
}
Run Code Online (Sandbox Code Playgroud)
以及扩展它的类Employee.
class Employee extends Person {
String address ;
public Employee()
{
super();
address ="default_address";
}
public Employee(String name , int age, String address)
{
super(name,age);
this.address = address; …Run Code Online (Sandbox Code Playgroud) 我正在阅读有效Java [第27项]中关于泛型的章节.
书中有这一段:
允许(尽管相对罕见)类型参数受涉及该类型参数本身的某个表达式的限制.这就是所谓的递归类型绑定.
还有这个:
// Using a recursive type bound to express mutual comparability
public static <T extends Comparable<T>> T max(List<T> list) {...}
Run Code Online (Sandbox Code Playgroud)
什么是递归类型绑定以及上面的代码如何帮助实现相互可比性?