回答編集履歴

5

追記

2017/10/05 02:38

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

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

誤記訂正

2017/10/05 02:38

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -78,9 +78,9 @@
78
78
 
79
79
 
80
80
 
81
- デコンパイル結果をjavaコードとして得たい場合、どこかからデコンパイルツールを見つけてくるとよいでしょう。自分はIntelliJ IDEAのplug-in(Femflower decompiler)を使ってます。使っているといってもIDEAを介して暗黙的に利用しているに過ぎませんが・・・
81
+ デコンパイル結果をjavaコードとして得たい場合、どこかからデコンパイルツールを見つけてくるとよいでしょう。自分はIntelliJ IDEAのplug-in(Fernflower decompiler)を使ってます。使っているといってもIDEAを介して暗黙的に利用しているに過ぎませんが・・・
82
82
 
83
- このFemflowerはplug-inとしてではなくスタンドアロンとしての利用もできるようですしjava8以降のbyte codeにも対応しているはずなので一応お奨めできると思います。デコンパイラーの中にはメンテが止まっていてjava8のbyte codeに対応していないものも見かけますので注意が必要です。
83
+ このFernflowerはplug-inとしてではなくスタンドアロンとしての利用もできるようですしjava8以降のbyte codeにも対応しているはずなので一応お奨めできると思います。デコンパイラーの中にはメンテが止まっていてjava8のbyte codeに対応していないものも見かけますので注意が必要です。
84
84
 
85
85
 
86
86
 

3

しりきれ文章訂正

2017/10/05 02:10

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

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

誤記訂正

2017/10/04 14:15

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -64,7 +64,7 @@
64
64
 
65
65
  ```java
66
66
 
67
- private void EnumTest2(String name, int ordinal) {
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

誤記訂正

2017/10/04 14:12

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -1,4 +1,4 @@
1
- まず最初に、参照しておられるqiitaページの著者さんはjavapとは異なるコンパイラー(逆アセンブルツール)を利用していると思います。javapはbyte codeのダンプは可能ですが、それに対応するjavaコードを表示する機能はなかったと思います。
1
+ まず最初に、参照しておられるqiitaページの著者さんはjavapとは異なるコンパイラー(逆アセンブルツール)を利用していると思います。javapはbyte codeのダンプは可能ですが、それに対応するjavaコードを表示する機能はなかったと思います。
2
2
 
3
3
 
4
4