2014-05-15 72 views
0

当我尝试编译我的代码时,出现错误,找不到.size().get(int)的符号。使用catch块中的方法将对象赋值给变量

如果我将catch循环移出catch块,我得不到 currentUserDiary变量的符号错误。

getExisitingDiaries()返回一个DiaryBook所以我认为这将工作。

只是想知道是否有这样的方式分配一个对象到变量有什么问题,或者如果我的代码的其余部分有问题。

我必须使用catch块,因为这些方法是从文本文件中读取的。

AccountList aListOb = new AccountList(); 
try { 
    aListOb.loadExistingDiaries(myAccountName); 
    DiaryBook currentUserDiary = new DiaryBook(); 
    currentUserDiary = aListOb.getExistingDiaries(myAccountName); 

    for (int i = 0; i < currentUserDiary.size(); i++) { 
     System.out.println(currentUserDiary.get(i)); 
    } 

} catch (IOException e) { 

} 

这些方法都在为accountList类:

public void loadExistingDiaries(String name) throws IOException { 
    for(int i = 0; i < aList.size(); i++) 
    { 
     if (aList.contains(new Account(name, null))) { 
      aList.get(i).loadExistingDiaries(); 
      break; 
     } 
    } 
} 

public DiaryBook getExistingDiaries(String name) throws IOException { 
    DiaryBook d = new DiaryBook(); 
    for(int i = 0; i < aList.size(); i++) 
    { 
     if (aList.contains(new Account(name, null))) { 
      aList.get(i).loadExistingDiaries(); 
      d = aList.get(i).getDiaryBook(); 
      break; 
     } 
    } 
    return d; 
} 
+1

'DiaryBook'有这些方法吗?它在我看来你正在尝试使用'DiaryBook'作为'List',它可能会或可能不会很好。显示'DiaryBook'或我们无法帮助。 –

+0

其中是aListOb.loadExistingDiaries(myAccountName);和aListOb.getExistingDiaries(myAccountName); ?? – PKlumpp

+1

另外,如果你只是想用下一行中的其他内容替换值,则不需要执行'new DiaryBook()'。 – saiarcot895

回答

1

try块内声明的变量的范围是在try块本身,试图从外部访问它会导致编译错误,因为该变量不可见。

如果你想在try之外使用该变量,你需要在外面声明它。

DiaryBook currentUserDiary = null; 

try { 
    aListOb.loadExistingDiaries(myAccountName); 
    currentUserDiary = aListOb.getExistingDiaries(myAccountName); 

    for (int i = 0; i < currentUserDiary.size(); i++) { 
     System.out.println(currentUserDiary.get(i)); 
    } 

} catch (IOException e) { 

} 

if(currentUserDiary != null){ 
    //Do your business 
} 
+0

谢谢!我的主要问题实际上是我需要一种方法将ArrayList从DiaryBook中取出(愚蠢的错误!),但这帮助我理解了我在解决问题后立即得到的错误。 – user2954911

0

你没有分享DiaryBook的密码。所以不能分辨get()和size()是否被实际声明。

  1. 请确保get()和size()在DiaryBook中声明并且可见(public accessor)。
  2. 当从通用列表中获取类型时,将其转换为DiaryBook。

而且,正如Guillermo Merino所建议的那样,在try catch块之外声明该变量可以使用它。