技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

java

JPAでのDelete実装方法三選

Spring Framework + JPAでのDelete実装方法について、調べるのに少し苦労しましたので、実装方法をまとめます。 ---- 1.CrudRepositoryインターフェースのメソッドを利用する全件削除、1つ~複数のエンティティクラスのインスタンスを指定して削除、1つ…

Java:リテラル用の領域の確保について

Javaの変数の型は、プリミティブ型と参照型に大別されます。そして、変数の値が同じであるかどうかを確認する場合、プリミティブ型は == で同じ値であることを確認できる(同じ値の場合はTrueになる)のに対し、参照型の場合は原則として == では確認できず…

java:参照型変数の中身のイメージ

Javaの参照型変数の中身は、何年かJavaの実装経験を積んだ人でもイメージすることが難しいです。しかし、ここがイメージできていないと、思わぬ落とし穴にはまることもあります。 C言語を経験していればイメージしやすくなりますが、そのためだけにC言語を学…

ソースコードの重複の排除を関数で学ぶ

「ソースコードから重複を排除して保守性を高める」という考え方は、実務で良いコードを書く上で重要な考え方です。この考え方が身に付かない内はオブジェクト指向の理解も不十分になるのですが、いきなりオブジェクト指向から入るとこの考え方の重要性がわ…

文字コードの入門

この記事では、文字コードに関する初歩的な内容について簡単に書きます。 1.文字コードという概念とコード体系コンピューターで取り扱う文字には、それぞれコードが割り振られています。コードは1~4バイトの情報として取り扱われ、1バイトの文字は1バイト…

EclipseのGradleプロジェクトに赤いビックリマーク(!)が出た時の対処

Eclipseからbuild.gradleを編集(1行スペースを入れる→そのスペースを削除)し保存してみて下さい。 なぜ赤いビックリマークが出るのかと言うと、何かしらの原因で設定したクラスパスが失われたからです。クラスパスはGradleにより設定されるので、Gradleで…

java:読み込んだ文字列を後ろから解釈する

ファイルから読み込んだ文字は前から解釈することが多いですが、ある程度のまとまり(例えば1行)を読みこんでから後ろから解釈した方が楽な場合があります。例えば、項目数が可変の場合に後ろの項目を取得するような場合に楽に処理できます。 今回は、以下…

java:ファイルを1バイトずつ読み込んで解釈する例

ファイルを1バイト/1文字ずつ読み書きすることでファイルの中身を解釈しながら処理することができる、というのは以前の記事で書いた通りです。今回の記事では、複雑なフォーマットのファイルを例に出して説明したいと思います。 ---- 今回の例では、以下…

java:ファイルを1バイトずつ/1文字ずつ読み書きする

ファイルの中身を前から順番に解釈しながら読み込む場合、ファイルを1バイトずつ/1文字ずつ読み込むと処理がしやすいです。ここでは、読み込みと書み込みのjavaのサンプルコードを示します。 1バイトずつ読み込んだ方が汎用性は高いのですが、1バイトず…

java:ソートキーが複数存在する場合、一時的なフォーマット変更ではなく独自Comparatorで対応するべき

複数のソートキーが存在するオブジェクトの配列について、固定長のフォーマットに直すことでソートキーを1つにできます。しかし、フォーマットを直して1つのキーでソートできるようにするよりも、独自Comparatorを定義して複数のキーでソートした方が高速…

Java:任意の順番でのソート

JavaのCollection型(サブクラスにList型等がある)は、Collections.sortメソッドでソートすることが可能です。Collections.sortメソッドは、第一引数にソートしたいCollection型のオブジェクト、第二引数にComparator型のオブジェクトを渡します。第二引数…

java:通常のクラスと匿名クラス(無名クラス)の書き方の比較

以前の記事(https://cyzennt.co.jp/blog/2020/10/16/%e7%84%a1%e5%90%8d%e3%82%af%e3%83%a9%e3%82%b9%e3%81%a8%e3%81%af/)で「通常のクラスと匿名クラスの書き方の比較を見たい」という意見があったので、少し補足を行います。 サンプルコードの通り、匿名…

Base64の説明とjavaでのエンコード・デコードの例

Base64とは、テキストデータやバイナリデータ(画像ファイル、PDFファイル等)を表現する方式の一つです。以下の64種類の文字と末尾のパディング文字(=)を用いて表現するのが特徴です。・アルファベット(a~z, A~Z)・数字(0~9)・一部の記号(+, /) …

java:例外発生後に例外のメッセージを書き変える

例外オブジェクトにはメッセージが格納されており、getMessage()メソッドでそのメッセージを取得することができます。しかし、このメッセージはコンストラクタでのみ設定可能であり、メッセージを後で変更するメソッドは用意されていないため、例外クラスに…

java:引数で渡した参照型変数をメソッド内で変更する書き方について

参照型変数を引数としてメソッドに渡し、呼び出し先のメソッドの中でその参照型変数に変更を入れた場合、呼び出し元でもその変更内容を参照することができます。ソースコードで言うと、以下のような形で呼び出し元に影響を与えることができます。(isDisplay…

java:例外を先に生成して後でthrowする

多くのソースコードでは、例外を発生させると同時にthrowしています。しかし、例外クラスもクラスの一つであり、newするとオブジェクトが生成されますので、先に例外クラスのオブジェクトを生成し、オブジェクトとしてやりとりした後、後でthrowすることが可…

java:重複を排除する方法3選

今回は、javaでListの重複排除を行う方法を3つ紹介します。 1つ目の方法は、for文で自力でアルゴリズムを記述して重複排除を行う方法です。記述が冗長になり、コーディングミスも起こりやすいことから、現在の実務ではこの方法で重複排除を行うことはない…

java:標準入出力の入力元・出力先を変更する

javaには・System.setIn・System.setOut・System.setErrの3つのメソッドが用意されており、これらのメソッドにより標準入出力の入力元・出力先を変更することができます。これらのメソッドを利用することで、標準入力や標準出力を使用している処理の立ち振…

java:関数を引数として渡す

C#では、こちらの記事のようにdelegateの仕組みを利用して関数を変数として扱うことができます。例えば、引数と引き渡してコールバック処理を実現することができます。 javaでも、8以降であれば関数型インターフェースを利用して関数を変数として扱うことが…

無名クラスとは

javaやC#では、インスタンス変数をnewする際に、後ろに中かっこを記述し定義を行うことができます。ここで定義されるものは「無名クラス(匿名クラス)」と呼ばれ、クラス名を新たに定義することなく、インスタンス変数のクラス・インターフェースを継承・実…

動的計画法を試してみた

動的計画法とは、再帰的なロジックを、計算結果を都度記録するロジックで代替することで、計算速度を向上させるテクニックです。競技プログラミングのテクニックの一つなのですが、高度なアルゴリズムを実装する開発だけではなく普通の業務システム開発にも…

続・singletonとstaticの違い

こちらの記事について社内外でちょっとした議論になったので、その内容をまとめてみました。Singletonパターンを利用する理由は「外部からnewさせたくないから」だと思っていましたが、「そう書いた方がわかりやすいから」「staticではないメソッドも利用可…

SpringFrameworkのAOPとは

AOPとは、「アスペクト指向プログラミング(Aspect Oriented Programming)」の略称です。「アスペクト」を日本語に直訳すると「相」ですが、プログラミングの世界では「オブジェクト指向ではうまく分離できない横断的な機能」のことを指します。代表例とし…

型推論とは

型推論とは、メソッド内のローカル変数を初期値付きで(右辺がある状態で)宣言する際に、通常の型宣言の代わりに"var"という仮の型を使用できるという文法です。"var"を用いた際は、コンパイル時に自動で型を判断し、その型への置き換えが行われます。 C#で…

java:実務で使うテクニックでfizzbuzzを解いてみた

10年ほど前に流行ったプログラミングの問題として、fizzbussと呼ばれる問題があります。この問題は、応募者のプログラミング経験の有無を見極める問題であり、問題の内容は以下の通りです。・1から100までの数を出力する。・3の倍数の時は代わりに"fizz"と…

オブジェクト指向言語で良く言われる「委譲」とは

javaやC#といったオブジェクト指向言語のプログラミングの話をしている時に、「委譲」という言葉が出てくる時があります。「委譲」には色々な意味があるのですが、このようなケースでは「具体的な処理が実装されている他のクラスのメソッドを呼び出す」とい…

Eclipse + Maven で Apache POI を用いてExcelファイルを出力する環境の構築(HelloWorldまで)

Apache POI を用いることで、javaでExcelファイルを出力するプログラムを作成することができるようになります。今回は、環境設定を行い、HelloWorldを試す所まで記事にしました。ライブラリを落としてきたりパスの設定をするのに手間がかかるので、今回は Ec…

java:walkFileTreeメソッドの使い方

walkFileTreeメソッドとは、ディレクトリ構造を再帰的に走査するメソッドです。Java7で追加されたFilesクラスが提供するメソッドの一つであり、比較的新しいメソッドです。(このメソッドの提供により、ディレクトリ構造については自力でCompositeパターンを…

リスコフの置換原則とは

リスコフの置換原則とはオブジェクト指向の設計の原則の一つであり、「基本クラスをサブクラスに入れ替えても問題なく動かなけらばならない」という原則です。もしサブクラスに入れ替えると正しく動かなくなるのであれば、クラスを利用する側はサブクラスを…

単一責任の原則とは

オブジェクト指向の設計ではいくつかの原則があります。その中でも有名な原則の一つが「単一責任の原則」です。 この原則は、その名の通り「一つのクラスに持たせる責任は一つにする」という原則です。この原則が何のために用いられるのかと言うと、複数の理…