UIスレッドに別スレッドからアクセスしてはいけないということは、swordoneさんが書かれているとおりです。
以下は、インナークラスとアウタークラスのアクセスについて回答します。
インナークラスからアウタークラスのフィールドへは、そのままアクセスすることが可能です。
一方、アウタークラスからインナークラスのフィールドにアクセスするには、
どのインスタンスかを特定してアクセスしてあげる必要があります。
java
1package example;
2
3// Outer class
4class Sample1 {
5 // Outer class field
6 String strOuter = "outer class string";
7
8 public static void main(String[] args) {
9 Sample1 sample1 = new Sample1();
10 sample1.foo();
11 // => Sample1 foo(): outer class string
12
13 Sample2 sample2 = sample1.new Sample2();
14 sample2.bar();
15 // => Sample2 bar(): outer class string
16
17 System.out.println("Sample1 main(): " + sample2.strInner);
18 // => Sample1 main(): inner class string
19 }
20
21 // Outer class method
22 void foo() {
23 System.out.println("Sample1 foo(): " + strOuter);
24 }
25
26 // Inner class
27 class Sample2 {
28 String strInner = "inner class string";
29
30 // Inner class method
31 void bar() {
32 System.out.println("Sample2 bar(): " + strOuter);
33 }
34 }
35}
インナークラスからアウタークラスのフィールドへのアクセスは、
「アウタークラス名.this」
が省略されていると考えるとわかりやすいです。
インナークラスのbar()メソッドですが、2通りの書き方があることになります。
java
1// サンプルコードの書き方
2System.out.println("Sample2 bar(): " + strOuter);
3
4// 省略しない書き方
5System.out.println("Sample2 bar(): " + Sample1.this.strOuter);
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/30 15:30 編集