回答編集履歴
5
追記
answer
CHANGED
@@ -30,12 +30,12 @@
|
|
30
30
|
|
31
31
|
なので、次に示すjavaコード相当であることが見て取れます。
|
32
32
|
|
33
|
+
リスト1:
|
33
34
|
```java
|
34
35
|
private EnumTest2(String name, int ordinal) {
|
35
36
|
super(name, ordinal);
|
36
37
|
}
|
37
38
|
```
|
38
|
-
|
39
39
|
---
|
40
40
|
|
41
41
|
デコンパイル結果をjavaコードとして得たい場合、どこかからデコンパイルツールを見つけてくるとよいでしょう。自分はIntelliJ IDEAのplug-in(Fernflower decompiler)を使ってます。使っているといってもIDEAを介して暗黙的に利用しているに過ぎませんが・・・
|
@@ -44,4 +44,17 @@
|
|
44
44
|
---
|
45
45
|
訂正:
|
46
46
|
コンストラクターなのにメソッドの型voidを書いていたので訂正しました orz
|
47
|
-
失礼しました。
|
47
|
+
失礼しました。
|
48
|
+
|
49
|
+
---
|
50
|
+
補足:
|
51
|
+
Fernflowerを使うとリスト2が得られ、jadを使うとリスト1が得られるとのこと。
|
52
|
+
|
53
|
+
リスト2:
|
54
|
+
```java
|
55
|
+
private EnumTest2() {}
|
56
|
+
```
|
57
|
+
|
58
|
+
よく考えてみるとこの点に気づけてなかったので補足します。
|
59
|
+
|
60
|
+
質問者さんの期待は「どのようなbyte codeとなるかを素朴にjavaコードで表現したもの」つまりリスト1であったわけですが、enumの場合、実際にコンストラクターに渡される最初の2つの引数(名前と順序数)はコンパイラーが内部的に生成するものであり、java言語仕様上はこれらの引数は明示的に記述できませんしsuperを呼び出すこともできないという点はご存知かと思います。つまり純粋にjavaとしての正しいソースコードを得るという意味ではjadよりむしろFernflowerの方が正しいということなのだと思います。jadを使うとbyte codeの生成の仕組みをストレートに知ることができるという利点がありますが、これを使うなら「必ずしもjavaの正しいソースコードが得られるわけではない」点に注意しておくべきなのでしょうね。
|
4
誤記訂正
answer
CHANGED
@@ -38,8 +38,8 @@
|
|
38
38
|
|
39
39
|
---
|
40
40
|
|
41
|
-
デコンパイル結果をjavaコードとして得たい場合、どこかからデコンパイルツールを見つけてくるとよいでしょう。自分はIntelliJ IDEAのplug-in(
|
41
|
+
デコンパイル結果をjavaコードとして得たい場合、どこかからデコンパイルツールを見つけてくるとよいでしょう。自分はIntelliJ IDEAのplug-in(Fernflower decompiler)を使ってます。使っているといってもIDEAを介して暗黙的に利用しているに過ぎませんが・・・
|
42
|
-
この
|
42
|
+
このFernflowerはplug-inとしてではなくスタンドアロンとしての利用もできるようですしjava8以降のbyte codeにも対応しているはずなので一応お奨めできると思います。デコンパイラーの中にはメンテが止まっていてjava8のbyte codeに対応していないものも見かけますので注意が必要です。
|
43
43
|
|
44
44
|
---
|
45
45
|
訂正:
|
3
しりきれ文章訂正
answer
CHANGED
@@ -39,7 +39,7 @@
|
|
39
39
|
---
|
40
40
|
|
41
41
|
デコンパイル結果をjavaコードとして得たい場合、どこかからデコンパイルツールを見つけてくるとよいでしょう。自分はIntelliJ IDEAのplug-in(Femflower decompiler)を使ってます。使っているといってもIDEAを介して暗黙的に利用しているに過ぎませんが・・・
|
42
|
-
このFemflowerはplug-inとしてではなくスタンドアロンとしての利用もできるようですしjava8以降のbyte codeにも対応しているはずなので一応お奨めできると思います。デコンパイラーの中にはメンテが止まっていてjava8のbyte codeに対応していないものも見かけますので。
|
42
|
+
このFemflowerはplug-inとしてではなくスタンドアロンとしての利用もできるようですしjava8以降のbyte codeにも対応しているはずなので一応お奨めできると思います。デコンパイラーの中にはメンテが止まっていてjava8のbyte codeに対応していないものも見かけますので注意が必要です。
|
43
43
|
|
44
44
|
---
|
45
45
|
訂正:
|
2
誤記訂正
answer
CHANGED
@@ -31,7 +31,7 @@
|
|
31
31
|
なので、次に示すjavaコード相当であることが見て取れます。
|
32
32
|
|
33
33
|
```java
|
34
|
-
private
|
34
|
+
private EnumTest2(String name, int ordinal) {
|
35
35
|
super(name, ordinal);
|
36
36
|
}
|
37
37
|
```
|
@@ -39,4 +39,9 @@
|
|
39
39
|
---
|
40
40
|
|
41
41
|
デコンパイル結果をjavaコードとして得たい場合、どこかからデコンパイルツールを見つけてくるとよいでしょう。自分はIntelliJ IDEAのplug-in(Femflower decompiler)を使ってます。使っているといってもIDEAを介して暗黙的に利用しているに過ぎませんが・・・
|
42
|
-
このFemflowerはplug-inとしてではなくスタンドアロンとしての利用もできるようですしjava8以降のbyte codeにも対応しているはずなので一応お奨めできると思います。デコンパイラーの中にはメンテが止まっていてjava8のbyte codeに対応していないものも見かけますので。
|
42
|
+
このFemflowerはplug-inとしてではなくスタンドアロンとしての利用もできるようですしjava8以降のbyte codeにも対応しているはずなので一応お奨めできると思います。デコンパイラーの中にはメンテが止まっていてjava8のbyte codeに対応していないものも見かけますので。
|
43
|
+
|
44
|
+
---
|
45
|
+
訂正:
|
46
|
+
コンストラクターなのにメソッドの型voidを書いていたので訂正しました orz
|
47
|
+
失礼しました。
|
1
誤記訂正
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
まず最初に、参照しておられるqiitaページの著者さんはjavapとは異なる
|
1
|
+
まず最初に、参照しておられるqiitaページの著者さんはjavapとは異なるデコンパイラー(逆アセンブルツール)を利用していると思います。javapはbyte codeのダンプは可能ですが、それに対応するjavaコードを表示する機能はなかったと思います。
|
2
2
|
|
3
3
|
ということを踏まえて・・・
|
4
4
|
|