今、2つのクラスがあります。
ClassEra.java
https://gist.github.com/AuroraNorthernQuarter/855c9dd731f8a00ac505ef11344596f2
Jidai.java
https://gist.github.com/AuroraNorthernQuarter/da1420345ca34e896b2b41147dbee16a
このうち「Jidai.java」の方は、Eclipse上で下記のようなエラーが出てきました。
6行目: static ClassEra[] data = { …(1)
→The field data cannot be declared static in a non-static inner type,unless initialized with a constant expression
21行目: public static void main(String[] args) { …(2)
→メソッドmainはstaticとして宣言できません。staticメソッドは、staticまたはトップ・レベル型においてのみ宣言できます
33行目: catch(IOException e) { ……(3)
→IOExceptionを型に解決できません
42行目: public static void main(String[] args) { …(4)
→メソッドbinarySearchはstaticとして宣言できません。staticメソッドは、staticまたはトップ・レベル型においてのみ宣言できます
(1)~(4)のエラーの理由と、どう書き換えたらエラーが生じなくなるか、お教えいただけないでしょうか。
よろしくお願い致します。
>6行目: static ClassEra[] data = { …(1)
inner クラス(Jidai クラスの内側で宣言されてる ClassBinarySearch クラスのようなやつ)は、外側のクラスのインスタンスがあって、なんぼみたいな動きをします。
この ClassEra は、親の Jidai の static なメンバにしておいた方が、悩むことが少なくなります。
>21行目: public static void main(String[] args) { …(2)
こちらも、エラーになってる理由は、(1) と同じようなもので。
Jidai クラスのメソッドにしてください。
>33行目: catch(IOException e) { ……(3)
java.io.IOException を、import してください。
>42行目: public static void main(String[] args) { …(4)
(2) と同じ理由です。
static じゃないメソッドにして、Jidai クラスのメソッドで ClassBinarySearch のインスタンスを作って呼び出すか、static にしたいなら、Jidai クラスのメソッドにしてください。
質問で提示されたソースの範囲なら、Jidai クラスにはメソッドもメンバもないので、ClassBinarySearch を innerクラスにしない、という方が素直かもしれません。
回答に書いた内容を、単純にコードに落とすと、以下のような感じです。
内側の ClassBinarySearch には、あまり意味が見いだせないので、以下のように innerクラスを使わない方が素直なように思うのですが。
2019/05/20 14:32:24ありがとうございます、色々な組み方があるんですね。
2019/05/24 03:21:39innerクラスを使わない方が読みやすい気がします。
そちらの方をEclipse上で貼り付けてみますと、なぜかClassEraの文字列がある行でエラー表示「ClassEraを型に解決できません」というのが出てきます。http://f.hatena.ne.jp/moon-fondu/20190524031949
度々申し訳ございません、このエラーが出る原因と、解決法もお教えいただけないでしょうか。
よろしくお願い致します<m(__)m>