Re: [問題]inner class存取其外部成員的問題
※ 引述《losesong (shen)》之銘言:
: 大家好
: 小弟在練習使用匿名的inner class的時候遇到了點問題
: 請大家指點迷津一下
: 當我在inner class中去存取其外部class的某個field時
: 若這個field在外部class的建構式中才去宣告,那編譯時就會出現錯誤訊息
: 訊息內容是cannot find symbol,而該symbol就是指那個field
: 程式碼的大略示意圖如下:
: public class OuterClass {
: public OuterClass() {
: ClassA refA = new ClassA(); //ClassA有一個我想用到的methodA
: }
: InnerClass inner = new InnerClass() {
: public void innerMethod() {
: refA.methodA(); //此處發生編譯錯誤:cannot find symbol,symbol:varible refA
: }
: };
: }
: ===========================換個方法===================================
: 但是,假如我在建構式之外先宣告refA,進了建構式再進一步將它指派給ClassA,
: 此時就可通過編譯
: 程式碼的大略示意圖如下:
: public class OuterClass {
: ClassA refA;
: public OuterClass() {
: refA = new ClassA(); //ClassA有一個我想用到的methodA
: }
: InnerClass inner = new InnerClass() {
: public void innerMethod() {
: refA.methodA(); //這一次通過編繹了,why??
: }
: };
: }
: 想請教各位,為什麼我在建構式之外先宣告過,就不會編譯錯誤了呢??
: 或是請大家指點我一下,該去查什麼相關的資料,可以解釋這個現象呢??
: 謝謝各位~
這個是scope的問題
外層的block宣告的變數可以給內層的block用
同層的block內的變數不能互用.
例如:
{
int a=0;
{
a=1; //ok
}
}
------------------
{
int a=0;
}
{
a = 1; //error cannot find the symbol
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.123.105.36
討論串 (同標題文章)