{{ ... }}块在以下代码中的含义是什么?
class X {
private Y var1;
private X() {
Z context = new Z(new SystemThreadPool()) {{
var1 = new Y();
}};
}
}
Run Code Online (Sandbox Code Playgroud) 如果在类中我有一个ConcurrentHashMap实例,它将被多个线程修改和读取,我可能会这样定义:
public class My Class {
private volatile ConcurrentHashMap<String,String> myMap = new ConcurrentHashMap<String,String>();
...
}
Run Code Online (Sandbox Code Playgroud)
添加final到myMap字段会导致错误,说我只能使用final或volatile.为什么不能两者兼而有之?
这是我的问题:给出这些课程
class A {}
class B extends A {}
Run Code Online (Sandbox Code Playgroud)
此代码编译:
List<Class<? extends A>> list = Arrays.asList(B.class, A.class);
Run Code Online (Sandbox Code Playgroud)
而这不是:
List<Class<? extends A>> anotherList = Arrays.asList(B.class);
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?
更新:此代码在Java 8中编译.显然,由于"改进的类型推断".
如何通过查看次要和主要集合的gc日志来查看正在运行的垃圾收集器(CMS,并行等)?我无法访问设置为java的命令行选项(appserver的sysadm不会让我看到它们).我确实有相当详细的gc日志.
这可能不是现实世界的场景,但只是想知道会发生什么,下面是代码.
我正在创建一组类的对象UsingSet.根据Java中的哈希概念,当我第一次添加包含"a"的对象时,它将创建一个带有哈希码97的桶并将对象放入其中.当它遇到带有"a"的对象时,它将在类UsingSet中调用重写的哈希码方法,它将获得哈希码97,那么下一步是什么?
由于我没有覆盖equals方法,因此默认实现将返回false.那么具有值"a"的Object将保留在哪个存储区中,其中保留了哈希码97的前一个对象?还是会创造新的桶?有谁知道它将如何存储在内部?
/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
class UsingSet {
String value;
public UsingSet(String value){
this.value = value;
}
public String toString() {
return value;
}
public int hashCode() {
int hash = value.hashCode();
System.out.println("hashcode called" + hash);
return hash;
}
public static void main(String args[]) {
java.util.Set s = new java.util.HashSet();
s.add(new UsingSet("A"));
s.add(new UsingSet("b"));
s.add(new UsingSet("a"));
s.add(new UsingSet("b"));
s.add(new UsingSet("a"));
s.add(new Integer(1));
s.add(new Integer(1));
System.out.println("s …Run Code Online (Sandbox Code Playgroud) 我之前从未见过这些错误,例如:
FATAL ERROR in native method: JDWP cannot get thread local storage, jvmtiError=JVMTI_ERROR_WRONG_PHASE(112)
如果我之后再次运行我的程序,则不会出现错误,这是我没有得到的.这个错误今天出现了好几次,甚至在这个最简单的代码示例中:
test.java
import java.io.File;
public class test {
public test() {
OpenFile opf = new OpenFile("test/data.txt");
OpenFile opf2 = new OpenFile(new File("test/data.txt"));
OpenFolder opfo = new OpenFolder("test");
OpenFolder opfo2 = new OpenFolder(new File("test"));
}
public static void main(String[] args) {
new test();
}
}
Run Code Online (Sandbox Code Playgroud)
OpenFile.java
import java.io.File;
public class OpenFile {
File openFile;
public OpenFile(String filePath) {
openFile(new File(filePath));
}
public OpenFile(File file) {
openFile(file);
}
public …Run Code Online (Sandbox Code Playgroud) 在Wikipedia 样本和GoF书中,访问者模式的使用是通过accept在某个接受者上调用方法来启动的.但为什么会这样呢?为什么我们不能开始visit用所需的接受器作为参数调用方法?我们仍然可以使访问者行为依赖于两种类型 - 访问者和接受者(双重调度) - 并且我们可以消除冗余呼叫(在我看来).
这是用于说明这一点的示例代码:
public interface Visitor {
void visit(AcceptorA acceptor);
void visit(AcceptorB acceptor);
}
//
// Visitor which sings
//
class SingingVisitor implements Visitor {
public void visit(AcceptorA acceptor) {
System.out.println("sing A");
}
public void visit(AcceptorB acceptor) {
System.out.println("sing B");
}
}
//
// Visitor which talks
//
class TalkingVisitor implements Visitor {
public void visit(AcceptorA acceptor) {
System.out.println("talk A");
}
public void visit(AcceptorB acceptor) {
System.out.println("talk B");
}
}
// …Run Code Online (Sandbox Code Playgroud) 如何使 MySQL JDBC 通过 SSL 工作(使用 X509 证书验证)?
我已经按照 MySQL 手册中所述自行创建了证书,具体如下Using SSL for Secure Connections:
# Create CA certificate
shell> openssl genrsa 2048 > ca-key.pem
shell> openssl req -new -x509 -nodes -days 1000 \
-key ca-key.pem > ca-cert.pem
# Create server certificate
shell> openssl req -newkey rsa:2048 -days 1000 \
-nodes -keyout server-key.pem > server-req.pem
shell> openssl x509 -req -in server-req.pem -days 1000 \
-CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
# Create client certificate
shell> openssl …Run Code Online (Sandbox Code Playgroud) 我希望 Spring@DependsOn在调用@PostConstruct方法时考虑到这一点,但似乎在存在循环(自动连接)依赖项时情况并非如此。
考虑两个 bean(下面的代码),BeanB @DependsOn BeanA. 当现场BeanA#b有它@Autowired注释掉,后期构造方法的调用预期顺序:先A,然后B.但随着@Autowired在甲效果,我有B的post第一调用,那么A的post。
我知道这是一个糟糕的设计(实际上,它是非常大的@Autowired...代码库的最小演示),但我期待 Spring 完成@Autowired字段的注入,然后开始调用生命周期回调,尊重@DependsOn,但 Spring 似乎忽略了@DependsOn顺序当有圆形深度时。
Spring 版本是 4.1.5。
那么,这是我的误解或未记录的行为,还是可以将其视为Spring 错误(或者,可能是功能请求)?
@Component
class BeanA {
// @Autowired
private BeanB b;
void f() {
System.out.println(this);
}
@PostConstruct
void post() {
System.out.println("A done");
}
@Override
public String toString() {
return "Bean{" + …Run Code Online (Sandbox Code Playgroud)