第36回 java,swift の Enumって
Enum ってなくてもなんとかなりそうだけど、使うとプログラムが見易いですよね。
さっそく、使っている場面を。
swift版 LapTimeManager.swift(旧 Entrance.swift)
class LapTimeManager: UIViewController { override func viewDidLoad() { // 設定 MySettings.setup() Team.setUp() // メインメニューの呼び出し makeMenu(menu: .Main) } private func removeSubView() { for view in self.view.subviews { view.removeFromSuperview() } } private func makeMenu(menu: Menu) { switch menu { case .Main: removeSubView() self.view.addSubview(mainViewMake()) case .Entry: removeSubView() self.view.addSubview(entryViewMake()) default: break } }
java版 LapTimeManager.java(旧 Entrance.java)
public class LapTimeManager extends RelativeLayout { public LapTimeManager(Context context) { super(context); Team.setUp(context); } public void enterMenu() { // 端末のサイズを取得 サイズをMySettingsに保存 MySettings.screenWidth = this.getWidth(); MySettings.screenHeight = this.getHeight(); // 設定 MySettings.setUp; Team.setUp(getContext()); // メインメニューの呼び出し makeMenu(Main); } private void makeMenu(Menu menu) { switch (menu) { case Main: break; case Entry: break; case Run: break; case Record: break; } }
MenuというEnumを定義しています。
定義自体はあまり変わりません。
swift版
public enum Menu { case Main case Entry case Run case Record case Help }
java版
public enum Menu { Main, Entry, Run, Record, Help }
ただ問題が・・・
前にも書きましたが、教科書の例題というのは、ファイル数を減らして簡単に例示したいようで、たくさんのファイルの扱い方を示していません。
というのは、Enumを別ファイルにしているのですが、
swift版ではMyEnum.swiftに置いていて稼働しています。
java版でも、MyEnum.java に置こうとしているのですが、
Class 'Menu' is public, should be declared in a file named 'Menu.java'
って怒ってるんですよね。
javaって厳格なのかもしれないけど、ちょっと堅苦しい・・・
1.Enum 名を MyEnumにする。
2.file名を 'Menu.java'にする。
3.Enum定義をClass内に置く。
クラスの肥大化は避けたいので、3はない。というより、もともと、このEnumはLapTimeManager.swift(java) のクラス内に定義してあったものを別ファイルにしようとしているので、3を実行するともとに戻ることになってしまうという、お笑いなんです。
2番が妥当でしょうか。