如何在java代码中去掉静态变量?

如何在java代码中去掉静态变量?,java,Java,伙计们: 我会问一个听起来很傻的问题。我需要使用一个类静态变量来删除它,它是高级队友的计数器。他说我应该只在必要时使用静态成员,这是线程不安全的。我所能想到的就是使用同步关键字。我想知道是否有更好的解决办法。下面是我目前的代码 package gov.faa.infra.ifp.domain.dao.isc; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertNotNull; imp

伙计们:

我会问一个听起来很傻的问题。我需要使用一个类静态变量来删除它,它是高级队友的计数器。他说我应该只在必要时使用静态成员,这是线程不安全的。我所能想到的就是使用同步关键字。我想知道是否有更好的解决办法。下面是我目前的代码

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);
}

}
package gov.faa.infra.ifp.domain.dao.isc;
导入静态org.junit.Assert.assertTrue;
导入静态org.junit.Assert.assertNotNull;
导入java.util.List;
导入org.apache.log4j.Logger;
导入gov.faa.infra.ifp.message.MessageCollectionBean;
公共抽象类可识别性测试{
私有静态int-recordedMessageLength=0;
私有静态记录器Logger=Logger.getLogger(IdentifiableTest.class.getName());
抽象公共无效支票个人可识别(T可识别对象);
公共无效检查可识别(T可识别对象){
checkMessageCollection();
检查个人可识别(可识别对象);
}
公共作废检查可识别列表(列表可识别列表){
checkMessageCollection();
assertNotNull(可识别列表);
assertTrue(identifiableList.size()>0);
for(int i=0;irecordedMessageLength){
int i=MessageCollectionBean.getMessages().length-1;
对于(字符串消息:MessageCollectionBean.getMessages()){
如果(i>=recordedMessageLength){
logger.debug(message+“###”+i+”在“+MessageCollectionBean.getMessages().length+”消息总数中的第条消息。recordedMessageLength=“+recordedMessageLength+”);
}
我--;
}
recordedMessageLength=MessageCollectionBean.getMessages().length;
}
}
assertTrue(MessageCollectionBean.getMessages()==null | | MessageCollectionBean.getMessages().length==recordedMessageLength);
}
}

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

请解释您试图执行/实现的操作。删除静态变量不是什么,而是如何删除。请避免使用“如何”部分,而将重点放在“什么”部分,这样做将为我们提供更大的背景,并有助于我们帮助您。这个问题实际上并没有指出您想问什么。-而且静态变量作为单个实体存在(即使您有100个类实例…静态变量也只有1个实例)。。。您可能希望为类的每个实例都使用一个单独的计数器。看起来您必须在您的情况下使用
static
变量,只是这样可能更合适。这没有帮助:方法调用的结果不会保存状态。嗨,各位,感谢您的帮助。是的,由于没有使用静态变量而保持状态,我被卡住了。@alfasin-这就是重点。没有必要在这个类中保留状态。返回它,并让调用者保存状态。避免静态的唯一其他方法是传入一些对象来保存状态,或者创建包含这些方法的类的实例。我有近100个方法调用checkMessageCollection,如果我让saver保存状态,这意味着我必须让调用者在调用checkMessageCollection之前获取消息长度,并且我必须更新所有这些位置?我还必须同步所有这些代码?只有在需要时才存储值。如果调用者不需要结果,不要保存它。