teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

補足が意味不明だったので書き換えました。

2018/04/02 14:03

投稿

mosa
mosa

スコア218

title CHANGED
File without changes
body CHANGED
@@ -34,34 +34,17 @@
34
34
 
35
35
  ---
36
36
 
37
- ###■追記補足
37
+ ###■追記補足
38
38
 
39
- リフレクションで記述しても結果は変わりませんでした。
39
+ ###コード3
40
40
 
41
- ###コード1のリフレクションでの記述
41
+ これも通る。
42
-
43
42
  ```Kotlin
43
+ var c: C? = C()
44
- var c: C? = Class.forName("C").newInstance() as C?
44
+ // c.m() // ←これは×
45
45
  c = C()
46
46
  c.m()
47
47
  ```
48
48
 
49
- OK
50
-
51
-
52
- ###コード2のリフレクションでの記述
53
-
54
- ```Kotlin
55
- var c: C? = Class.forName("C").newInstance() as C?
56
- c.m()
57
- ```
58
-
59
- コンパイルエラー
60
-
61
-
62
- ###■追記補足2
63
-
64
- `c.m()` の代わりに `println(c!!.javaClass)` と記述した場合は全てコンパイルが通り、結果はすべて `class C` でした。
65
-
66
49
  ---
67
50
  ※タイトルを修正しました。

2

誤記修正

2018/04/02 14:03

投稿

mosa
mosa

スコア218

title CHANGED
File without changes
body CHANGED
@@ -61,8 +61,7 @@
61
61
 
62
62
  ###■追記補足2
63
63
 
64
- `c.m()` の代わりに `println(c!!.javaClass)` と記述した場合結果はすべて `class C` でした。
64
+ `c.m()` の代わりに `println(c!!.javaClass)` と記述した場合は全てコンパイルが通り、結果はすべて `class C` でした。
65
- (当たり前ですが)
66
65
 
67
66
  ---
68
67
  ※タイトルを修正しました。

1

コメント・ご指摘を受けタイトル・一部内容を修正。また、補足を追記。

2017/09/12 05:33

投稿

mosa
mosa

スコア218

title CHANGED
@@ -1,1 +1,1 @@
1
- Kotlin の Smart Cast について
1
+ Kotlin の Null-Safety について
body CHANGED
@@ -1,6 +1,8 @@
1
1
  いつもありがとうございます。
2
- Kotlinのスマートキャストについて質問させてください。
2
+ Kotlin Null-Safety について質問させてください。
3
3
 
4
+
5
+
4
6
  ```Kotlin
5
7
  class C {
6
8
  fun m() = println("hello")
@@ -27,6 +29,40 @@
27
29
  ```
28
30
 
29
31
  これは Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type C? というコンパイルエラーとなります。
30
- 「コード1」がOKで、「コード2」がNG理由はなんでしょうか。
32
+ 「コード1」がOKで、「コード2」がNGである理由を教えていただけますでしょうか。
31
33
 
34
+
35
+ ---
36
+
37
+ ###■追記補足1
38
+
39
+ リフレクションで記述しても結果は変わりませんでした。
40
+
41
+ ###コード1のリフレクションでの記述
42
+
43
+ ```Kotlin
44
+ var c: C? = Class.forName("C").newInstance() as C?
45
+ c = C()
46
+ c.m()
47
+ ```
48
+
49
+ OK
50
+
51
+
52
+ ###コード2のリフレクションでの記述
53
+
54
+ ```Kotlin
55
+ var c: C? = Class.forName("C").newInstance() as C?
56
+ c.m()
57
+ ```
58
+
59
+ コンパイルエラー
60
+
61
+
62
+ ###■追記補足2
63
+
32
- **※Kotlinインプリメントの実態ついてお聞きているありません。このようなインプリメントとなっいる理由をお聞きています**
64
+ `c.m()` 代わり `println(c!!.javaClass)` と記述た場合結果すべ `class C` で
65
+ (当たり前ですが)
66
+
67
+ ---
68
+ ※タイトルを修正しました。