見出し画像

【Console Application】基本文法 22【学習記】

制御構造if,switch,tryとか特殊な演算三項演算子,ビット,論理,算術関数とかそういう手合の話🤤

Q.
クラス内 enum はクラス外とどう違うの?
A.
ファイルを分けなくて良いけどクラスと同じ名前は使えないかな🙄
クラスを使う事が前提になるので他の参照が多くなると予想されるなら独立している方が良いね🤤

→列挙子に独自値を与えたい場合、初期化子コンストラクタを自分で作らなくてはならない
 →一応 IntelliJ にはスニペット提案が出るのでそこそこお手軽🤤

#学習記 #Java
#enum   #IntelliJ

基準のコードはこちら

【Console Application】基本文法 19【学習記】
https://note.com/sayka/n/n924beb3da425


enum 絶許

それじゃ、型判別の Java 版、続きやろうかな🤤

Javaの定数はEnumで! Enumの使い方から考え方までお伝えします
1-1.Enumの宣言の仕方
https://www.bold.ne.jp/engineer-club/java-enum#-Enum
Enumを宣言したファイル名は「Enum名.java」となります。クラスと同じルールですね。
入門Javaのenum
[上級編]enumはEnumのサブクラス
https://qiita.com/suke_masa/items/bd242617a2b9bb773cbd#%E4%B8%8A%E7%B4%9A%E7%B7%A8enum%E3%81%AFenum%E3%81%AE%E3%82%B5%E3%83%96%E3%82%AF%E3%83%A9%E3%82%B9
enumは暗黙的にjava.lang.Enumのサブクラスとして定義されます。

要するに class なので独立化しないといけない、と言っている模様🤤
でもちょっと待ってほしい。クラス内クラスインナークラスというのができる筈なのよね🙄
ならば enum も内部的には class なのだから可能である筈…🤔

画像1

実際、プロジェクトを IntelliJ で見るとクラス内列挙型は識別されているのよね🙄

【Java】列挙型(Enum)について
https://www.task-notes.com/entry/20151016/1444964400
トップレベルで宣言する場合の文法はクラス宣言とほぼ同じで、public の付いた enum名はソースファイル名と同じでなければならず、また、public の付いた enum はソースファイル内に1つしか定義できません。クラス宣言との違いは、必ず先頭に enum定数の列挙が必要な点です。
enum型をクラス内で宣言する場合(Hoge.javaファイルで宣言する)
public class Hoge {
   enum Gender { MAN, WOMAN, OTHER }
}

………🤔

enum型のオブジェクトに特定の値を持たせたい場合は以下のように宣言します。
public enum Gender {
   // コンストラクタの呼び出し
   MAN(0),
   WOMAN(1),
   OTHER(2);  // 振る舞いを持たせる場合はセミコロンが終端
   
   private final int id;  // メンバ変数
   
   Gender(int id) {  // privateコンストラクタ
       this.id = id;
   }
}

ん?この記事もそうだけど、他を見ても値が入ってるのはみんなこの「コンストラクタ」を定義してるね🤔
つまり関連付けの値を持つ為のメソッドを実装しないと数値だけ与えてもナニソレ?ってなってるのかな🙄

画像2

画像3

おおう、これだ🤪

画像4

よし、次はエイリアスよー🤤

画像5

ちょっと装飾が多くてめんどいけどこれで良いみたい🤔
最初 static 書いてなかったんだけど static メンバに不正アクセスしてるって怒られたので付けた🙄
他の記事を見ても分かるけど enum は他とちょっと違って色々 static になるっぽい🤤

画像6

エイリアス ヨシ!👈🤪


【 Java 】変数種別判定クラス

enum 拒否の憂いは消えたので他のコピペJavaScriptコードを手コンパイルJava化開始よー🤤

画像7

画像8

コードスニペット便利🤤

画像9

おっと、既に有るコードを置換した方が早いんだった🤪

画像10

TypeDic ヨシ!👈🤪

置換の時、正規表現でやったんだけど、なんか勝手に1行飛ばしてちゃんと一気にできなかった😞
多分 IntelliJ の不具合…

画像11

compressTypeString ヨシ!👈🤪

ここは Swift と同じ使い方できるね☺️
というか OCObjective-C の制限が多すぎなのかな🙄
なんでいつになっても enum 関数できるようにならないんだろね? C++ は🤔


次回は

Java の typeof とか instanceof を調べるところからやろうかな🤤
Java なら似た様な物が有った筈🤔

この記事が気に入ったらサポートをしてみませんか?