小编Vic*_*kin的帖子

new Class(...){{...}}初始化习语的含义

{{ ... }}块在以下代码中的含义是什么?

class X {

    private Y var1;

    private X() {
        Z context = new Z(new SystemThreadPool()) {{
            var1 = new Y();
        }};
    }

}
Run Code Online (Sandbox Code Playgroud)

java initialization double-brace-initialize

44
推荐指数
2
解决办法
8819
查看次数

为什么Object成员变量在Java中不能是final和volatile?

如果在类中我有一个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.为什么不能两者兼而有之?

java syntax multithreading

35
推荐指数
3
解决办法
9897
查看次数

泛型投射问题

这是我的问题:给出这些课程

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中编译.显然,由于"改进的类型推断".

java generics

17
推荐指数
2
解决办法
670
查看次数

如何通过查看gc日志来查看正在运行的垃圾收集器?

如何通过查看次要和主要集合的gc日志来查看正在运行的垃圾收集器(CMS,并行等)?我无法访问设置为java的命令行选项(appserver的sysadm不会让我看到它们).我确实有相当详细的gc日志.

java garbage-collection jvm

8
推荐指数
1
解决办法
1650
查看次数

如果我们只覆盖类中的hashCode()并在Set中使用它会发生什么?

这可能不是现实世界的场景,但只是想知道会发生什么,下面是代码.

我正在创建一组类的对象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)

java collections set

8
推荐指数
2
解决办法
1万
查看次数

我不断得到随机错误,当我运行我的程序时

我之前从未见过这些错误,例如:

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)

java jvm runtime-error

7
推荐指数
1
解决办法
8942
查看次数

为什么我们通过调用Acceptor.accept()而不是Visitor.visit()来启动Visitor?

在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)

java design-patterns

6
推荐指数
2
解决办法
973
查看次数

MySQL JDBC over SSL 问题

如何使 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)

java mysql ssl jdbc

4
推荐指数
1
解决办法
2万
查看次数

Spring:循环依赖,@PostConstruct 和 @DependsOn 强加的顺序

我希望 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)

java spring

4
推荐指数
1
解决办法
3921
查看次数