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(); } 退货清单; }
我使用other的API来实现我的编程,其中有一个内部类。twitterStream似乎会多次使用该类。我想记录调用了多少次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)//不允许这样做
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();