質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

827閲覧

JavaでStringのスペルミスを防ぎたい

tiqua_nibio

総合スコア62

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

1クリップ

投稿2020/05/07 03:00

私のプロジェクトでは、下記のようなコードが複数のJavaファイルにわたって存在します。

Java

1List<String> list_code = Arrays.asList("ABW","AFG","AGO","AIA","ALA","ALB","AND","ARE","ARG","ARM","ASM","ATA","ATF","ATG","AUS","AUT","AZE","BDI","BEL","BEN","BES","BFA","BGD","BGR","BHR","BHS","BIH","BLM","BLR","BLZ","BMU","BOL","BRA","BRB","BRN","BTN","BVT","BWA","CAF","CAN","CCK","CHE","CHL","CHN","CIV","CMR","COD","COG","COK","COL","COM","CPV","CRI","CUB","CUW","CXR","CYM","CYP","CZE","DEU","DJI","DMA","DNK","DOM","DZA","ECU","EGY","ERI","ESH","ESP","EST","ETH","FIN","FJI","FLK","FRA","FRO","FSM","GAB","GBR","GEO","GGY","GHA","GIB","GIN","GLP","GMB","GNB","GNQ","GRC","GRD","GRL","GTM","GUF","GUM","GUY","HKG","HMD","HND","HRV","HTI","HUN","IDN","IMN","IND","IOT","IRL","IRN","IRQ","ISR","ITA","JAM","JEY","JOR","JPN","KAZ","KEN","KGZ","KHM","KIR","KNA","KOR","KWT","LAO","LBN","LBR","LBY","LCA","LIE","LKA","LSO","LTU","LUX","LVA","MAC","MAF","MAR","MCO","MDA","MDG","MDV","MEX","MHL","MKD","MLI","MLT","MMR","MNE","MNG","MNP","MOZ","MRT","MSR","MTQ","MUS","MWI","MYS","MYT","NAM","NCL","NER","NFK","NGA","NIC","NIU","NLD","NOR","NPL","NRU","NZL","OMN","PAK","PAN","PCN","PER","PHL","PLW","PNG","POL","PRI","PRK","PRT","PRY","PSE","PYF","QAT","REU","ROU","RUS","RWA","SAU","SDN","SEN","SGP","SGS","SHN","SJM","SLB","SLE","SLV","SMR","SOM","SPM","SRB","SSD","STP","SUR","SVK","SVN","SWE","SWZ","SXM","SYC","SYR","TCA","TCD","TGO","THA","TJK","TKL","TKM","TLS","TON","TTO","TUN","TUR","TUV","TWN","TZA","UGA","UKR","UMI","URY","USA","UZB","VAT","VCT","VEN","VGB","VIR","VNM","VUT","WLF","WSM","YEM","ZAF","ZMB","ZWE"); 2 3if(list_code.contains("NAM")){ 4... 5} 6

私が心配しているのが、deleteキーやBackSpaceキーによって変更されてしまわないかと言うことです。

そこで考えられるのが、定数専門のJavaファイルを作って下記のように入力して見るというものです。

Java

1 public final String ABW = "ABW"; 2 public final String AFG = "AFG"; 3 public final String AGO = "AGO";

そうすればEclipseなどではエラーが表示されるのでわかりやすいです。

Java

1List<String> list_code = Arrays.asList(ABW,AFG,AGO,AIA,ALA,ALB,AND,ARE,ARG,ARM,ASM,ATA,ATF,ATG,AUS,AUT,AZE,BDI,BEL,BEN,BES,BFA,BGD,BGR,BHR,BHS,BIH,BLM,BLR,BLZ,BMU,BOL,BRA,BRB,BRN,BTN,BVT,BWA,CAF,CAN,CCK,CHE,CHL,CHN,CIV,CMR,COD,COG,COK,COL,COM,CPV,CRI,CUB,CUW,CXR,CYM,CYP,CZE,DEU,DJI,DMA,DNK,DOM,DZA,ECU,EGY,ERI,ESH,ESP,EST,ETH,FIN,FJI,FLK,FRA,FRO,FSM,GAB,GBR,GEO,GGY,GHA,GIB,GIN,GLP,GMB,GNB,GNQ,GRC,GRD,GRL,GTM,GUF,GUM,GUY,HKG,HMD,HND,HRV,HTI,HUN,IDN,IMN,IND,IOT,IRL,IRN,IRQ,ISR,ITA,JAM,JEY,JOR,JPN,KAZ,KEN,KGZ,KHM,KIR,KNA,KOR,KWT,LAO,LBN,LBR,LBY,LCA,LIE,LKA,LSO,LTU,LUX,LVA,MAC,MAF,MAR,MCO,MDA,MDG,MDV,MEX,MHL,MKD,MLI,MLT,MMR,MNE,MNG,MNP,MOZ,MRT,MSR,MTQ,MUS,MWI,MYS,MYT,NAM,NCL,NER,NFK,NGA,NIC,NIU,NLD,NOR,NPL,NRU,NZL,OMN,PAK,PAN,PCN,PER,PHL,PLW,PNG,POL,PRI,PRK,PRT,PRY,PSE,PYF,QAT,REU,ROU,RUS,RWA,SAU,SDN,SEN,SGP,SGS,SHN,SJM,SLB,SLE,SLV,SMR,SOM,SPM,SRB,SSD,STP,SUR,SVK,SVN,SWE,SWZ,SXM,SYC,SYR,TCA,TCD,TGO,THA,TJK,TKL,TKM,TLS,TON,TTO,TUN,TUR,TUV,TWN,TZA,UGA,UKR,UMI,URY,USA,UZB,VAT,VCT,VEN,VGB,VIR,VNM,VUT,WLF,WSM,YEM,ZAF,ZMB,ZWE);

ただもっといい方法があるのではないかと思い、質問させていただきました。何か知恵がありましたら拝借したいと思います。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2020/05/07 03:03

> deleteキーやBackSpaceキーによって変更されてしまわないか ご質問の意図が少々分からないのですが、ソースコードの追加、修正などで間違って修正されて、気が付かないで作業を進めてしまうような事故を防ぎたいということでしょうか。
退会済みユーザー

退会済みユーザー

2020/05/07 03:05

現時点では enum だな
tiqua_nibio

2020/05/07 03:16

>気が付かないで作業を進めてしまうような事故を防ぎたいということでしょうか。 はい。そういうことです。実のところ、これはDBのカラム名です。ですので、containsなもののみアップデートするようなメソッドを使っています。
dodox86

2020/05/07 03:37

修正箇所を集中させる目的で定数をまとめたクラスに書くことはありましたが、プログラミング作業中のうっかり事故を防ぐ目的で考えたことはまったくありませんでしたね。Gitのようなソースコード管理システムでガードする範囲のように思いましたが。投稿される(かもしれない)回答にちょっと興味があります。(私自身は回答を持たないので、このコメントのみで失礼します)
cateye

2020/05/07 07:13 編集

よくわからないので、質問ですが? > 複数のJavaファイルにわたって存在〜 というのは、同じ記述を含むソースファイルが複数有るという事でしょうか
tiqua_nibio

2020/05/07 09:50

> というのは、同じ記述を含むソースファイルが複数有るという事でしょうか はい、そうです。Arrays.asListの中に入るパターンも色々と変わります。
guest

回答2

0

私が心配しているのが、deleteキーやBackSpaceキーによって変更されてしまわないかと言うことです。

人間がコードを打っている以上、100%防ぐのは無理なので、「起きにくい仕組み」「起きた時に捕捉する方法」「起きた後のリカバリー」を加味した工程を組むしかありません。
既に出ているようにEnumにするところがいいところでしょうけど、全てに対して適切な策とは限りません。
「簡単にキー操作で変更できない」となるともういっそ全てDBに持ってしまうとか(色々と煩雑になると思うけど)

でも値を変えるということは何かに変化が起きるので、それはそれでどこかのタイミングで気づけそうなものですけど。
JUnitなどできちんとテスト書いてinput/outputの整合性を確認するようにすれば良いかと。

投稿2020/05/07 12:40

m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiqua_nibio

2020/05/10 10:46

ありがとうございます。インターフェースに列記することで、運用することにしてみます。
guest

0

ベストアンサー

asahina1979さんがおっしゃってるように、
Enumで定義すればよいのではないでしょうか?

例) public enum ColumnIndex { ABW, AFG, AGO,    (省略) ; }
  • 定義を追加する場所が固定される
  • values()で定義している値全てを配列で取得できる
  • name()でenum宣言で宣言されているとおりのenum定数の名前を取得できる
  • 必要ならJavadoc付けて意味を説明できる
  • switch文とかにも使える

などなど、利点はあるかと思います。
そもそも、長く羅列させるのがバグを生む原因かと。

Arrays.asList()の引数にvalues()すれば羅列しなくても一発ですね。
リストの中身を毎回変える必要がないなら、Enumクラスにリストも定義しておけばいいんじゃないですかね。

ん?values()でfor文回せばリスト要らないかも!?

投稿2020/05/07 06:37

編集2020/05/07 06:41
kaputaros

総合スコア1844

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiqua_nibio

2020/05/10 10:49

ありがとうございます。 enumに記載するというのも一つの方法かと思われます。 その後で、 final String __aaa = ColumnIndex.aaa.name(); というのを並べて使えるようにするという方法をインターフェースでやろうと思います。なぜ、インターフェースかというと、変数の前にドットでクラス名・インスタンス名をつけなくても済むからです。 JSPの場合は、これができませんので素直に="aaa"で並べました。
kaputaros

2020/05/11 04:46

> なぜ、インターフェースかというと、変数の前にドットでクラス名・インスタンス名をつけなくても済むからです。 ん?「import static」を使えばイケませんか? まあ、解決されたのであればそれでも。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問