Java 为什么可以';初始化匿名内部类中的变量吗?
当我试图从我在内部类中初始化的对象访问变量时,NullPointerException有一个问题。但是在内部类中,它设置了所有元素,一切都很好Java 为什么可以';初始化匿名内部类中的变量吗?,java,firebase,nullpointerexception,inner-classes,anonymous-class,Java,Firebase,Nullpointerexception,Inner Classes,Anonymous Class,当我试图从我在内部类中初始化的对象访问变量时,NullPointerException有一个问题。但是在内部类中,它设置了所有元素,一切都很好 public class FirebaseConnectionStream extends FirebaseConnection { private Object DownloadResult; public void publish(String path,Map<String,Object> map){
public class FirebaseConnectionStream extends FirebaseConnection {
private Object DownloadResult;
public void publish(String path,Map<String,Object> map){
try{
DatabaseReference ref = database.getReference(path);
ref.updateChildren(map);
}
catch(Exception e){
e.printStackTrace();
}
}
public <T> PortfolioInfo download(String path,final T object){
try{
DatabaseReference ref = database.getReference(path);
ref.addValueEventListener(new ValueEventListener(){
@Override
public void onCancelled(DatabaseError arg0) {
// TODO Auto-generated method stub
}
@Override
public void onDataChange(DataSnapshot arg0) {
try{
DownloadResult = arg0.getValue(object.getClass());
PortfolioInfo p = (PortfolioInfo) DownloadResult;
System.out.println(p.getId()); // This line here works?
}
catch(Exception e){
e.printStackTrace();
}
}
});
}
catch(Exception e){
e.printStackTrace();
}
return (PortfolioInfo) DownloadResult; // But this one does not?
}
}
公共类FirebaseConnectionStream扩展FirebaseConnection{
私有对象下载结果;
公共无效发布(字符串路径、地图){
试一试{
databasereferef=database.getReference(路径);
参考更新儿童(地图);
}
捕获(例外e){
e、 printStackTrace();
}
}
公共PortfolioInfo下载(字符串路径,最终T对象){
试一试{
databasereferef=database.getReference(路径);
ref.addValueEventListener(新的ValueEventListener(){
@凌驾
已取消的公共void(数据库错误arg0){
//TODO自动生成的方法存根
}
@凌驾
public void onDataChange(DataSnapshot arg0){
试一试{
DownloadResult=arg0.getValue(object.getClass());
PortfolioInfo p=(PortfolioInfo)下载结果;
System.out.println(p.getId());//这里这行行行行吗?
}
捕获(例外e){
e、 printStackTrace();
}
}
});
}
捕获(例外e){
e、 printStackTrace();
}
return(PortfolioInfo)DownloadResult;//但是这个没有?
}
}
在ValueEventListener
中的方法是异步的,当您尝试返回DownloadResult
时,onDataChange
将不会被调用,因此DownloadResult
将为空