[解決済み】Javaで構造体のようなオブジェクトを作成する
2022-04-15 18:56:47
質問
構造体のようなオブジェクトを作成することは、Javaのやり方に完全に反しているのでしょうか?
class SomeData1 {
public int x;
public int y;
}
アクセッサとミューテータを持つクラスは、よりJavaらしいと言えますね。
class SomeData2 {
int getX();
void setX(int x);
int getY();
void setY(int y);
private int x;
private int y;
}
最初の例のクラスは、記法的に便利です。
// a function in a class
public int f(SomeData1 d) {
return (3 * d.x) / d.y;
}
これでは不便です。
// a function in a class
public int f(SomeData2 d) {
return (3 * d.getX()) / d.getY();
}
解決方法は?
これはよく議論されるトピックです。オブジェクトにパブリックフィールドを作成することの欠点は、そこに設定される値を制御できないことです。多くのプログラマーが同じコードを使用するグループプロジェクトでは、副作用を避けることが重要です。さらに、フィールドのオブジェクトのコピーを返したり、何らかの方法で変換したりした方が良い場合もあります。そのようなメソッドは、テストの中でモック化することができます。新しいクラスを作成する場合、すべての可能なアクションを見ることはできないかもしれません。これは防御的なプログラミングのようなもので、ゲッターやセッターはいつか役に立つかもしれませんし、それらを作成したり使用したりするのに多くのコストはかかりません。だから、時には役に立つのです。
実際には、ほとんどのフィールドは単純なゲッターとセッターを持っています。可能な解決策は次のようなものです。
public property String foo;
a->Foo = b->Foo;
更新:Java 7でプロパティのサポートが追加される可能性は極めて低く、おそらく今後も追加されないでしょう。 Groovy、Scalaなどの他のJVM言語は、現在この機能をサポートしている。- Alex Miller
関連
-
スタイルが読み込まれず、ブラウザコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
アクセス制限について アプリケーションの種類がAPIでない(必要なライブラリの制限)。
-
linux run jarfile Invalid or corrupt jarfile error.
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ファインバグタイプ
-
eclipse で「アクセス制限: タイプ 'HttpServer' は API ではありません」というプロンプトが表示される。
-
jd-gui Java Exceptionが発生しました。
-
eclipse アクセス制限です。タイプ 'xxx' は API ではありません(必須ライブラリ '' の制限)。
-
Android Studio 3.1.2 で v4, v7 パッケージが見つからない シンボル 'AppCompatActivity' を解決できない
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
xxx:jarのアーティファクトディスクリプタの読み込みに失敗した問題は解決しました。
-
spring aop アドバイスからの Null 戻り値が、サマリーのプリミティブ戻り値と一致しない。
-
Eclipse起動エラー:javaは起動したが、終了コード=1を返した(ネット上の様々な落とし穴)
-
Error: java.lang.NoClassDefFoundError: クラス XXXX を初期化できませんでした