Pergunta

Olhando através de algum código java e isso apenas não parece certo.Para mim, parece que cada vez que você chamar projetos, você irá obter um novo hashmap, de modo a que esta declaração é sempre falsa

projects.get(soapFileName) != null

Parece que deve ter um campo de apoio

public static HashMap<String,WsdlProject> projects = new HashMap<String,WsdlProject>();

public Object[] argumentsFromCallSoapui(CallT call, Vector<String> soapuiFiles, HashMap theDPLs,int messageSize)
{
    try {
        for (String soapFileName:soapuiFiles){
            System.out.println("Trying "+soapFileName);
            WsdlProject project ;
            if (projects.get(soapFileName) != null){
                project = projects.get(soapFileName);
            } else {
                project = new WsdlProject(soapFileName);
                projects.put(soapFileName,project);
            }
        }
    } ...
}
Foi útil?

Solução

Não. Em Java, essa variável estática é inicializada apenas uma vez.

Então, essa linha só será chamada uma vez.

public static HashMap<String,WsdlProject> projects = new HashMap<String,WsdlProject> ();

Outras dicas

O projetos variável será inicializada uma vez, quando a classe é carregado pela primeira vez.

Geralmente, estático mapas desse tipo são uma má idéia:eles, muitas vezes, se transformar em vazamentos de memória, como você mantenha entradas passado longo da sua vida útil.

Neste caso em particular, eu gostaria de também se preocupar com a segurança do thread.Se você tiver vários segmentos chamando este método (o que é provável, no código de lidar com web services), você precisará sincronizar o acesso ao mapa ou você pode danificar a ele.

E, em geral, estilística nota, é uma boa idéia para definir as variáveis usando o menos restritivo de classe:neste caso, a interface Mapa, em vez de a classe concreta HashMap.

Você não ligar projects - É um campo, não um método.

Como é um campo estático, ele será inicializado exatamente uma vez (Modulo o mesmo tipo que está sendo carregado em vários carregadores de classe).

Se você adicionar um inicializador estático (construtor estático?), Você poderá ver que a estática é inicializada na primeira vez em que a classe é carregada:

public class Hello {
    static { System.out.println("Hello static World!"); }

    ...
}

Você não receberá um novo hashmap toda vez que invoca um método em projetos, se é isso que você está se referindo. Um novo hashmap será criado uma vez, no entanto, todas as instâncias da classe compartilharão um único hashmap.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top