Java 如何计算内部类中调用方法的次数? //获取包含关键字的tweet数量 公共ArrayList getStream(字符串关键字,整数){ TwitterStream TwitterStream=新建TwitterStreamFactory().getInstance(); ArrayList=新建ArrayList(); StatusListener=新建StatusListener(){ @凌驾 公共无效状态(状态){ if(status.getGeoLocation()!=null){ StreamStatus stramStatus=新的StreamStatus(); list.add(stramStatus);//不允许这样做!!! //无法在其他方法中定义的内部类中引用非final变量 } } }; twitterStream.addListener(listener); 字符串[]关键字={“埃博拉”}; FilterQuery filtro=新建FilterQuery().track(关键字); twitterStream.filter(filtero); 如果(list.size()==100){ twitterStream.cleanUp(); twitterStream.shutdown(); } 退货清单; }

Java 如何计算内部类中调用方法的次数? //获取包含关键字的tweet数量 公共ArrayList getStream(字符串关键字,整数){ TwitterStream TwitterStream=新建TwitterStreamFactory().getInstance(); ArrayList=新建ArrayList(); StatusListener=新建StatusListener(){ @凌驾 公共无效状态(状态){ if(status.getGeoLocation()!=null){ StreamStatus stramStatus=新的StreamStatus(); list.add(stramStatus);//不允许这样做!!! //无法在其他方法中定义的内部类中引用非final变量 } } }; twitterStream.addListener(listener); 字符串[]关键字={“埃博拉”}; FilterQuery filtro=新建FilterQuery().track(关键字); twitterStream.filter(filtero); 如果(list.size()==100){ twitterStream.cleanUp(); twitterStream.shutdown(); } 退货清单; },java,twitter4j,inner-classes,Java,Twitter4j,Inner Classes,我使用other的API来实现我的编程,其中有一个内部类。twitterStream似乎会多次使用该类。我想记录调用了多少次public void onStatus(Status) 说到计数器,我想这更容易理解我的问题。实际上,我只是想知道如何实现list.add(stramStatus)//不允许这样做

我使用other的API来实现我的编程,其中有一个内部类。twitterStream似乎会多次使用该类。我想记录调用了多少次
public void onStatus(Status)


说到计数器,我想这更容易理解我的问题。实际上,我只是想知道如何实现
list.add(stramStatus)//不允许这样做问题是,正如编译器所说,您引用的是内部类中的非
final
变量。将其更改为
final ArrayList list=new ArrayList()

此:

    //get the number of tweets with keyword
public ArrayList<StreamStatus> getStream(String keyWord, int number) {
    TwitterStream twitterStream = new TwitterStreamFactory().getInstance();
    ArrayList<StreamStatus> list = new ArrayList<StreamStatus>();
    StatusListener listener = new StatusListener() {
        @Override
        public void onStatus(Status status) {
            if(status.getGeoLocation() != null) {
                StreamStatus stramStatus = new StreamStatus();
                list.add(stramStatus);      //don't allow do that !!!
//cannot refer to a-non-final variable inside a inner class defined in a different method 
            }
        }
    };
    twitterStream.addListener(listener);
    String[] keyword = {"ebola"};
    FilterQuery filtro = new FilterQuery().track(keyword);    
    twitterStream.filter(filtro);
    if(list.size() == 100) {
        twitterStream.cleanUp();
        twitterStream.shutdown();
    }
    return list;
}
我认为这个列表不会一直精确到100个,我想在它到达之前你不会循环。你冒着它跳过100的风险,你最终错过了清理/关闭。可能您需要执行以下操作:

twitterStream.filter(filtro);
if(list.size() == 100) {
    twitterStream.cleanUp();
    twitterStream.shutdown();
}
while(list.size()<100){
螺纹屈服强度();
twitterStream.filter(filtero);
}
twitterStream.cleanUp();
twitterStream.shutdown();

但这只是一个猜测,因为我以前没有使用过twitterstream,我只是假设这些方法能像我想的那样工作。但你得注意一下==无论如何,如果多个EL消息将其推过100,则100是危险的,因此无论您做什么,可能>=100都会更好,即使我的建议完全错误。

增加一个变量。如果我在内部类中添加变量,我如何在内部类之外读取它?将其放在其他地方。请参阅下面的答案。将来,请在创建帖子时包含这样的细节<代码>不允许这样做
含糊不清,不允许我们帮助您解决任何问题。不,您可以。您无法使用
=
运算符重新分配列表。
final List<StreamStatus> list = new ArrayList<StreamStatus>();
twitterStream.filter(filtro);
if(list.size() == 100) {
    twitterStream.cleanUp();
    twitterStream.shutdown();
}
while (list.size() < 100) {
    Thread.yield();
    twitterStream.filter(filtro);
}

twitterStream.cleanUp();
twitterStream.shutdown();