【发布时间】:2018-10-29 23:24:15
【问题描述】:
我需要返回一个在methodB() 中设置的object,我已经尝试了很多并且也搜索了:
interface A{}
interface B{}
class Main{
Object method(){
Object o;
new A(){
methodA(){
new B(){
methodB(){
// how to use setters of o here?
}
}
}
}
return o;// o should contain the values set in methodB()
}
}
我的实际代码
public ImageUtil saveImagetoStorage() {
final ImageUtil imageUtil[] = new ImageUtil[1];
filepath.putFile(mPublishedImageUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull final Task<UploadTask.TaskSnapshot> task) {
UploadTask uploadTask = FirebaseUtil.sStorageReference.child(thumbs)
.child(randomName + ".jpg").putBytes(thumbData);
uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
String downloadthumbUri = taskSnapshot.getDownloadUrl().toString();
imageUtil[0]=new ImageUtil();
imageUtil[0].setImgUrl(downloadUri);
imageUtil[0].setImgThumb(downloadthumbUri);
}
});
}
});
return imageUtil[0];
}
我错过了什么吗?提前致谢。
【问题讨论】:
-
methodA()和methodB()来自哪里?摘自 A 和 B ?还是接口? -
我认为
o需要最终确定:final Object o; -
正确的@azro,那些A和B是接口的实现。
-
o 可以是最终的,我们可以在 methodB() @markspace 中设置它,但是当我返回 o 时,它们将变为 null。
-
您的
saveImagetoStorage方法在onSuccess方法执行之前返回。此外,onSuccess方法将由另一个线程执行,因此您的代码也需要成为线程安全的。重新考虑事件的顺序。您不能在下载完成之前返回ImageUtil,并且您不必等待UploadTask任务完成。
标签: java inner-classes anonymous-inner-class