回答編集履歴
5
追記
test
CHANGED
@@ -62,6 +62,8 @@
|
|
62
62
|
|
63
63
|
|
64
64
|
|
65
|
+
リスト1:
|
66
|
+
|
65
67
|
```java
|
66
68
|
|
67
69
|
private EnumTest2(String name, int ordinal) {
|
@@ -71,8 +73,6 @@
|
|
71
73
|
}
|
72
74
|
|
73
75
|
```
|
74
|
-
|
75
|
-
|
76
76
|
|
77
77
|
---
|
78
78
|
|
@@ -91,3 +91,29 @@
|
|
91
91
|
コンストラクターなのにメソッドの型voidを書いていたので訂正しました orz
|
92
92
|
|
93
93
|
失礼しました。
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
---
|
98
|
+
|
99
|
+
補足:
|
100
|
+
|
101
|
+
Fernflowerを使うとリスト2が得られ、jadを使うとリスト1が得られるとのこと。
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
リスト2:
|
106
|
+
|
107
|
+
```java
|
108
|
+
|
109
|
+
private EnumTest2() {}
|
110
|
+
|
111
|
+
```
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
よく考えてみるとこの点に気づけてなかったので補足します。
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
質問者さんの期待は「どのようなbyte codeとなるかを素朴にjavaコードで表現したもの」つまりリスト1であったわけですが、enumの場合、実際にコンストラクターに渡される最初の2つの引数(名前と順序数)はコンパイラーが内部的に生成するものであり、java言語仕様上はこれらの引数は明示的に記述できませんしsuperを呼び出すこともできないという点はご存知かと思います。つまり純粋にjavaとしての正しいソースコードを得るという意味ではjadよりむしろFernflowerの方が正しいということなのだと思います。jadを使うとbyte codeの生成の仕組みをストレートに知ることができるという利点がありますが、これを使うなら「必ずしもjavaの正しいソースコードが得られるわけではない」点に注意しておくべきなのでしょうね。
|
4
誤記訂正
test
CHANGED
@@ -78,9 +78,9 @@
|
|
78
78
|
|
79
79
|
|
80
80
|
|
81
|
-
デコンパイル結果をjavaコードとして得たい場合、どこかからデコンパイルツールを見つけてくるとよいでしょう。自分はIntelliJ IDEAのplug-in(Fe
|
81
|
+
デコンパイル結果をjavaコードとして得たい場合、どこかからデコンパイルツールを見つけてくるとよいでしょう。自分はIntelliJ IDEAのplug-in(Fernflower decompiler)を使ってます。使っているといってもIDEAを介して暗黙的に利用しているに過ぎませんが・・・
|
82
82
|
|
83
|
-
このFe
|
83
|
+
このFernflowerはplug-inとしてではなくスタンドアロンとしての利用もできるようですしjava8以降のbyte codeにも対応しているはずなので一応お奨めできると思います。デコンパイラーの中にはメンテが止まっていてjava8のbyte codeに対応していないものも見かけますので注意が必要です。
|
84
84
|
|
85
85
|
|
86
86
|
|
3
しりきれ文章訂正
test
CHANGED
@@ -80,7 +80,7 @@
|
|
80
80
|
|
81
81
|
デコンパイル結果をjavaコードとして得たい場合、どこかからデコンパイルツールを見つけてくるとよいでしょう。自分はIntelliJ IDEAのplug-in(Femflower decompiler)を使ってます。使っているといってもIDEAを介して暗黙的に利用しているに過ぎませんが・・・
|
82
82
|
|
83
|
-
このFemflowerはplug-inとしてではなくスタンドアロンとしての利用もできるようですしjava8以降のbyte codeにも対応しているはずなので一応お奨めできると思います。デコンパイラーの中にはメンテが止まっていてjava8のbyte codeに対応していないものも見かけますので。
|
83
|
+
このFemflowerはplug-inとしてではなくスタンドアロンとしての利用もできるようですしjava8以降のbyte codeにも対応しているはずなので一応お奨めできると思います。デコンパイラーの中にはメンテが止まっていてjava8のbyte codeに対応していないものも見かけますので注意が必要です。
|
84
84
|
|
85
85
|
|
86
86
|
|
2
誤記訂正
test
CHANGED
@@ -64,7 +64,7 @@
|
|
64
64
|
|
65
65
|
```java
|
66
66
|
|
67
|
-
private
|
67
|
+
private EnumTest2(String name, int ordinal) {
|
68
68
|
|
69
69
|
super(name, ordinal);
|
70
70
|
|
@@ -81,3 +81,13 @@
|
|
81
81
|
デコンパイル結果をjavaコードとして得たい場合、どこかからデコンパイルツールを見つけてくるとよいでしょう。自分はIntelliJ IDEAのplug-in(Femflower decompiler)を使ってます。使っているといってもIDEAを介して暗黙的に利用しているに過ぎませんが・・・
|
82
82
|
|
83
83
|
このFemflowerはplug-inとしてではなくスタンドアロンとしての利用もできるようですしjava8以降のbyte codeにも対応しているはずなので一応お奨めできると思います。デコンパイラーの中にはメンテが止まっていてjava8のbyte codeに対応していないものも見かけますので。
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
---
|
88
|
+
|
89
|
+
訂正:
|
90
|
+
|
91
|
+
コンストラクターなのにメソッドの型voidを書いていたので訂正しました orz
|
92
|
+
|
93
|
+
失礼しました。
|
1
誤記訂正
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
まず最初に、参照しておられるqiitaページの著者さんはjavapとは異なる
|
1
|
+
まず最初に、参照しておられるqiitaページの著者さんはjavapとは異なるデコンパイラー(逆アセンブルツール)を利用していると思います。javapはbyte codeのダンプは可能ですが、それに対応するjavaコードを表示する機能はなかったと思います。
|
2
2
|
|
3
3
|
|
4
4
|
|