简体   繁体   English

如何在我的Java代码中摆脱静态变量?

[英]How to get rid of static variable in my java code?

Guys: 专家:

I would ask a question that may sounds silly. 我想问一个听起来很愚蠢的问题。 I need to remove using a class static variable which is a counter by senior teammate. 我需要使用类静态变量删除该类,该变量是高级队友的计数器。 he said I should only use static member when necessary, and it is thread unsafe. 他说我只应在必要时使用静态成员,这是线程不安全的。 All I can figure out is to use synchronized key word. 我能弄清楚的是使用同步关键字。 I would know if there is better solution. 我想知道是否有更好的解决方案。 Here is below is my current code. 下面是我当前的代码。

package gov.faa.infra.ifp.domain.dao.isc;

import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertNotNull;

import java.util.List;

import org.apache.log4j.Logger;

import gov.faa.infra.ifp.message.MessageCollectionBean;

public abstract class IdentifiableTest<T>{

private static int recordedMessageLength=0; 
private static Logger logger = Logger.getLogger(IdentifiableTest.class.getName());

abstract public void checkIndividualIdentifiable(T identifiableObject);

public void checkIdentifiable(T identifiableObject){
    checkMessageCollection();
    checkIndividualIdentifiable(identifiableObject);
}

public void checkIdentifiableList(List<T> identifiableList){
    checkMessageCollection();
    assertNotNull(identifiableList);
    assertTrue(identifiableList.size()>0);

    for (int i=0; i<identifiableList.size(); i++){          
        checkIndividualIdentifiable(identifiableList.get(i));
    }
}

public void checkMessageCollection(){

    if (MessageCollectionBean.getMessages()!=null){
        if (MessageCollectionBean.getMessages().length>recordedMessageLength){
            int i=MessageCollectionBean.getMessages().length-1;
            for (String message: MessageCollectionBean.getMessages()){
                if(i>=recordedMessageLength){
                    logger.debug(message+"##"+i+"th message in the total of "+MessageCollectionBean.getMessages().length+" messages. recordedMessageLength="+recordedMessageLength+"####Message Collection Bean");
                }
                i--;
            }
            recordedMessageLength=MessageCollectionBean.getMessages().length;
        }
    }

    assertTrue(MessageCollectionBean.getMessages()==null || MessageCollectionBean.getMessages().length==recordedMessageLength);
}

}

看起来它是由checkMessageCollection()计算的,因此使其成为方法调用的结果。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM