从Head Firstdevise模式书中,双重检查locking的单例模式已经实现如下: public class Singleton { private volatile static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } 我不明白为什么volatile被使用。 不volatile用法是否会volatile使用双重检查的locking(即性能)的目的?
我有一个用户对象的列表,我试图sorting列表,但只能使用方法引用,与lambdaexpression式编译器给出了一个错误: List<User> userList = Arrays.asList(u1, u2, u3); userList.sort(Comparator.comparing(u -> u.getName())); // works userList.sort(Comparator.comparing(User::getName).reversed()); // works userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error 错误: com\java8\collectionapi\CollectionTest.java:35: error: cannot find symbol userList.sort(Comparator.comparing(u -> u.getName()).reversed()); ^ symbol: method getName() location: variable u of type Object 1 error
为什么我需要添加一个“L”字母来获得正确的长值? 另一个价值是什么? long oneYearWithL = 1000*60*60*24*365L; long oneYearWithoutL = 1000*60*60*24*365; System.out.println(oneYearWithL);//gives correct calculation result : 31536000000 System.out.println(oneYearWithoutL)//gives incorrect calculation result: 1471228928
@Test public void testListCur(){ List<String> li=new ArrayList<String>(); for(int i=0;i<10;i++){ li.add("str"+i); } for(String st:li){ if(st.equalsIgnoreCase("str3")) li.remove("str3"); } System.out.println(li); } 当我运行这个代码时,我将抛出ConcurrentModificationException。 它看起来好像当我从列表中删除指定的元素,列表不知道它的大小已经改变。 我想知道这是一个常见的问题收集和删除元素?
当添加'a' + 'b'它会产生195.输出数据types是char还是int ?
这个想法是有一个string读取,并validation它不包含任何数字字符。 所以像“smith23”这样的东西是不可接受的。
好的,我一直在谷歌网上,我似乎无法find任何解决我的问题。 我find了很多解决scheme,但都没有。 我需要创build一个generics的数组。 但genericstypes本身扩展了Comparable。 当我尝试以下: public class Hash<T extends Comparable<String>> { private T[] hashTable; private int tableSize; Hash(int records, double load) { tableSize = (int)(records / loadFactor); tableSize = findNextPrime(tableSize); hashTable = (T[])(new Object[tableSize]); //Error: Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable; } } 问题是该对象不能被转换为扩展Comparable的generics。 有没有解决的办法?
如何将Resultset对象转换为JSP上的分页视图? 例如,这是我的查询和结果集: pst = con.prepareStatement("select userName, job, place from contact"); rs = pst.executeQuery();
在一个DirectoryWalker类中,我想知道一个File实例是否是一个到目录的符号链接(假设Walker在UNIX系统上行走)。 鉴于,我已经知道这个实例是一个目录,下面是一个确定符号链接的可靠条件吗? File file; // … if (file.getAbsolutePath().equals(file.getCanonicalPath())) { // real directory —> do normal stuff } else { // possible symbolic link —> do link stuff }
我正在用Java构build一个项目。 我有这个错误: Unable to locate tools.jar. Expected to find it in C:\Program Files\Java\jre6\lib\tools.jar 我已经安装了一个JDK文件夹: C:\Program Files\Java\jre6\lib在我的系统中,但是tools.jar文件不存在。