JAVA関連のことを調べてみた2020年09月08日

JAVA関連のことを調べてみた2020年09月08日

Bridgeパターン

###Bridgeパターンとは
「機能のクラス階層」と「実装のクラス階層」の橋渡しを行う。
wikipediaには、「橋渡し」のクラスを用意することによって、クラスを複数の方向に拡張させることを目的とすると書かれている。

###Abstraction(抽象化)の役
「機能のクラス階層」の最上位のクラス。
Implementor役のメソッドを使って基本的な機能だけが記述されているクラス。
このクラスはImplementor役を保持する。

““java
package bridge;

public class Display {
private DisplayImpl impl;

public Display(DisplayImpl impl) {
this.impl = impl;
}

public void open() {
impl.rawOpen();
}

public void print() {
impl.rawPrint();
}

public void close() {
impl.rawClose();
}

publ

元記事を表示

Java 8からのストリームAPIを使ったデータ処理

このブログ記事では、**Java 8**から**Stream API**を使ってデータを宣言的に処理する方法を紹介しています。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/process-collections-easily-with-stream-in-java-8_594894)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

Javaでは、コレクションと配列は2つの一般的なデータ構造であり、追加、削除、変更、クエリ、集計、統計、フィルタリングなど、多くの操作が定期的に実行されます。これらの操作はリレーショナルデータベースにも存在します。しかし、Java 8以前では、コレクションや配列を処理するのはあまり便利ではありません。

この問題は、Java 8ではStream APIと呼ばれる新しい抽象化を導入することで大幅に緩和され、宣言的な方法でデータを処理することができるようになりました。この記事では、Streamの使い方を紹介します

元記事を表示

【Java】メイン・クラスXXXが見つからなかったかロードができませんでした

###別のファイルをコピーして作成しただけなのになんで実行できないの?クラスファイルも生成されているのに!!
`java_lessons/com/dot/myapp`にMyApp.javaを作成。
MyApp.javaをコピーして`Practice.java`を作成。
試したいことをPractice.javaに書いていく。

MyApp.javaの外部クラスを`java_lessons/com/dot/myapp/model`に入れていて、それを読みこんでいたけど、外部クラスを読み込まずに簡単なコードを試したいのでpackageとimportを削除してPractice.javaを作成して行った。

そしてコンパイルはうまく行ったけど、実行ができない。

実行しようとすると

`メイン・クラスcom.dot.myapp.Practiceが見つからなかったかロードができませんでした`というエラーのループに。

調べたらPATHがどうとか書いてたけど、java_lessonsのディレクトリとは別にtestディレクトリを作成してそこにPractice.javaを移動してコンパイル・実行をすると

元記事を表示

努力を可視化! 積み上げ管理アプリの開発〜5週間でSpringアプリリリース〜

# はじめに
先日、「5週間でwebサービスリリース人集まれ!!!第三弾」という勉強会企画に参加し、約5週間の間Webアプリ開発・リリース作業を行った後、LTで成果物を発表しました。
使用したフレームワークはSpringです。
本記事では作成したWebアプリの機能の紹介や開発経緯、今後のWebアプリ改修の課題について記します。

勉強会企画のURL(connpass):
[5週間でwebサービスリリース人集まれ!!!第三弾※もくもく会のみ参加もOK](https://shinjukuasakatu.connpass.com/event/183656/)
[【朝活・新宿・もくもく会】第3弾 5週間でwebサービスリリースイベントのLT発表会](https://shinjukuasakatu.connpass.com/event/187636/)

# 作成したWebアプリの概要

今回作成したのは、毎日の努力=積み上げを記録・表示するアプリです。
Twitterで「今日の積み上げ」というハッシュタグがあり、勉強や筋トレといった毎日の努力やライフログが投稿されていますが、その積み上げを可視

元記事を表示

IntelliJ IDEAの成功の秘訣

このブログ記事では、**IntelliJ IDEA**の**Java**統合開発環境を紹介し、その成功の秘訣を論じています。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/what-can-we-learn-from-intellij-idea_594851)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

この記事は元々、アリババのシニア技術専門家呉翔がアリババのイントラネットに掲載したものです。現在は、アリババ・ミドルウェアの許可を得て公開されています。

最近、Java IDEをEclipseからIDEAにアップグレードしました。アップグレードの過程で、私はIntelliJ IDEAを研究し、それについていくつかの研究をしました。IntelliJ IDEA(商用)がEclipse(無料)よりも評価が高い理由がわかったので、個人的な感想を紹介したいと思います。

この記事を読んだ後、Creative Flowとエルゴノミクスは自分を強

元記事を表示

【AndroidStudio】【Java】学習メモ&リンク集

※AS=AndroidStudio

| No | 種別 | 用語 | 自分の言葉で簡潔に | 参考記事 |
|:–:|:—-:|:—-:|:—–|:——–|
| 1 | AS | View
(Object) | VBで言うとControlに当たる。ボタンやテキストボックスなどのUI部品を指す。
例:`view.getId()` | [**Android Viewとは(ViewとViewGroupの関係性)**
-ANDROIDろいど- プログラム開発入門](https://androidroid.info/android/view/482/) |
| 2 | AS | R
(Class) | 画面に配置したViewのIDを管理しているクラス。AndroidStudioにより自動生成される。
※ver4.0.1では「R.java」というファイルはプロジェクトフォルダ内に見つけられず。
例:`findViewById(R.id.myButton)` | [**

元記事を表示

Log4j 2ログシステムの基礎となる概念の理解

この記事では、Apache Log4j上に構築された新しいログシステムである**Log4j** 2のソースコードを分解して、その基礎となる概念について深く掘り下げていきます。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/exploring-the-secrets-of-java-logs-log4j-2-log-system_594821)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

#概要
Log4j 2は、Logbackアーキテクチャを参照してApache Log4j上に構築された全く新しいログシステムです。これは、Log4jが基本的にLogbackによって非推奨になっているからだと思います。

Log4j 2の利点については、公式ドキュメント[Apache Log4j 2](https://logging.apache.org/log4j/2.0/index.html?spm=a2c65.11461447.0.0.15d965

元記事を表示

【Java】finalのオーバーライドのエラーはコンパイル時には表示されない

###パッケージ化してる場合

親クラスにfinal修飾子を設定したメソッドを子クラスでオーバーライドしても、コンパイル時にはエラーが表示されず、コンパイル後の実行の段階でエラー表示される。

###パーケージ化していない場合
コンパイル時にエラーが表示されるみたい。

教材と挙動が違ったのでメモしておきます。

元記事を表示

Spring Bootを試す1(環境構築 ~ Tomcat起動)

# はじめに

Spring Bootでサンプルプログラムを書きたいと思います。
参考にするのは、[Spring徹底入門](https://www.amazon.co.jp/Spring%E5%BE%B9%E5%BA%95%E5%85%A5%E9%96%80-Spring-Framework%E3%81%AB%E3%82%88%E3%82%8BJava%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA-%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BENTT%E3%83%87%E3%83%BC%E3%82%BF/dp/4798142476)です。
こちらで紹介されている会議室予約システムを作っていきます。

# Javaのインストール

Javaをインストールしましょう。
バージョンはいろいろありますが、今回はOpenJDK 8でいきます。
WSL2を利用している方は、以下のコマンドでダウンロードできます。

“`:WSL2
$ su

元記事を表示

【Java】二つ以上の引数をsuperに渡す場合の書き方

###superって何?
これがそもそもわかっていないと何のこっちゃという感じです。

どうやらイメージ的には`メソッド`ですかね。

正しいのかどうかはわかりませんが、調べても`〜ときに使われます`とかそういう説明しか見当たらなかったです。

###メソッドだと思えば、引数の書き方がイメージしやすい。

superを使いと何がどうなるのかわからないので、こんな風に書いてエラーになります

“`java
public class Oya {
private String name;
private int score;

// コンストラクタ
public Oya(String name, int score) {
this.name = name;
this.score = score;
}

// 子クラスから変数の値を読み込めるようにするgetter
public String getName() {
return this.name;
}

// 子クラスから変数の値を読み込めるようにするgetter
pub

元記事を表示

今使っているElasticsearchのバージョンはJava11に対応しているのか?

というお話です。
いや、JDK11(OpenJDK)のリリースが2018年9月と2年も前やし、当たり前やろーっ!と思う人もいるかもしれませんが、、
製品によってはそうでない可能性もある(実際、AWSのElastic BeantalkがJava11に完全対応(GA)したのが2020年4月 – この記事を執筆した2020年9月時点の約5ヶ月前とわりと最近だった)ので、念のため調べてみました。

## 事の発端

事の発端となったのが公式サイトの以下のページ

– [Compatibility | elastic](https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-compatibility.html)

> The Java High Level REST Client requires Java 1.8 and depends on the Elasticsearch core project. ・・・

なぬ? Java1.8だと・・・?
今動かしている環境がJav

元記事を表示

Spring バリデーションエラーを@ControllerAdviceで一括ハンドリング

# 結論
[@ControllerAdvice](https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/ControllerAdvice.html)を付与したハンドラクラスを用意すれば、各コントローラのバリデーションエラーのハンドリングを一括で処理できる。

# 環境
`Java 11`
`SpringBoot 2.3.3`
# 解説
以下、検索パラメータを指定してユーザー一覧を取得するRESTコントローラにて解説する。
リクエストの入力バリデーションを設け、バリデーションエラー検出時には所定のレスポンスボディと併せて400エラーを返すようにする。

※package、import文など省略しています。

## コントローラクラス

引数に`@Validated`を付与し、バリデーションが実施されるようにする。
エラー時のハンドリングはここでは特にしない。

“`java

@RestController
@Requi

元記事を表示

インターフェースと抽象クラスの違い

#インターフェースと抽象クラスの違い

#抽象クラス
抽象クラスはabstractメソッドを付ける事で強制出来る、メソッドは通常通り作れる
⇒継承させることで、サブクラスのメソッドを強制的に付ける事が出来る。
 つまり、派生したクラスに同一のメソッドを持たせる事と強制的にメソッドを作らせる事で
 強制力を持たせるクラスが作れる

 チームには、Aというクラスの中にはみんなが使う税率メソッドをつかって共通化されているけど
 地域の税金は、地域によってちがうから個々の派生したクラスでメソッドを作ってね。

#インターフェース
⇒インターフェースをimplementしたクラスは、インターフェースの箱に入れる事ができるつまり、インターフェースをimplementしておけば、条件によってAとBと切り替えが出来る。

サンプル(インターフェース)

“`
public interface ControlPanelIf {
void play();
void pause();
void stop();
void forwardFast();
void b

元記事を表示

今さらだけど! AndroidのNotificationをJavaで実装してみる(初級編)

# はじめに

Androidの通知(Notification)に関する基本的な使い方を記します。
内容は初心者向けの簡単なものになっています。サンプルアプリをベースに説明したいと思います。

サンプルアプリの環境は以下のとおりです。
– Android Studio 4.0.1
– MacOS 10.15.6
– Android Virtual Device – android10.0 / 1080 x 2160

# Notificationとは
[公式ページ](https://developer.android.com/guide/topics/ui/notifiers/notifications?hl=ja)によると以下のような記述があります

> 通知は、アプリの UI 以外で Android が表示するメッセージであり、リマインダー、他の人からのメッセージ、アプリからのタイムリーな情報などをユーザーに提供します。ユーザーは通知をタップしてアプリを開いたり、通知から直接操作したりできます。

うーん、難しいですね・・・
要するにスマホのステータスバーに表示されるアレですね

元記事を表示

Java バッファリング処理

#【Java バッファリング処理】

業務内で使用する Javaのバッファリング処理のメモです。
開発時に使用しているのでまとめました。

##バッファ

バッファは、文字列を格納する変数である。
bufferは、「緩衝材」の意味を持つ。

プリミティブ型のデータを保存するための入れ物。
boolean型以外のすべてのプリミティブ型がある。

##バッファリング処理

バッファリング処理とは、
書き込み時であれば、データを一旦メモリー(バッファ)に蓄積し、いっぱいになったところで、ファイル出力する処理。
読み込み時であれば、バッファにまとめてデータを読み込み、いっぱいになったところで、データを処理。
→データをまとめて処理が出来て、読み書きが効率化する。

元記事を表示

Java 文字列

#【Java 文字列】

業務内で使用する Javaの文字列のメモです。
開発時に使用しているのでまとめました。

##StringBuilder

StringBuilderクラスは、インスタンス生成してから使用可能
文字列操作を行うためのクラスである。

文字列結合では、appendメソッド、引数を利用し結合したい文字列を使用する。

多数の文字列を連結する場合、最も高い性能を発揮するStringBuilderの使用を試みるべき。

“`java
//業務内で使用している形式の一部を抜粋

//インスタンス生成
StringBuilder sb = new StringBuilder();

//SQL生成
sb.append(“SELECT”);
sb.append(“Sample”);
sb.append(“Sample2”);
sb.append(“Sample3”);
sb.append(“FROM”);
sb.append(“SampleTable”);

//※365日24時間、バッチ処理を行っているので、処理速度が遅くならないように使用している。
“`

##S

元記事を表示

Spring Data JPAのsaveのselect-insertをinsertだけにする

# 現象
spring-data-jpaでidを明示的に指定して“`save“`する場合、以下のログのようにselectしてからinsertになる。

“`java
Sample newEntity = new Sample(1L, “name”);
repository.save(newEntity);
“`

“`sql
Hibernate: select sample0_.id as id1_0_0_, sample0_.name as name2_0_0_ from sample sample0_ where sample0_.id=?
Hibernate: insert into sample (name, id) values (?, ?)
“`

idがすでに永続化済みかどうかをselectしてからinsertするのはjpaの挙動である。しかし、ある種のバッチ処理などでは、仕様としてそのidが存在しない事が明らかな場合がある。この場合はselectは単に無駄となるので防ぎたい。以下はこの事前selectを防ぐ方法について。

# ソースコード

“`grad

元記事を表示

【Java Bronze】学習メモ(インターフェース,staticメソッド,型変換など )

Java Bronze学習にあたり、よく間違える箇所のまとめ。

##インターフェース

・フィールドは定数のみ
フィールドは全て、final staticで暗黙的に修飾される。(修飾子は省略可能)
staticでフィールドを修飾することができる
(※staticで定義された値はインスタンスを作成しなくても実行できるため)

・メソッドは全て、public abstractで暗黙的に修飾される
staticでメソッドを修飾することはできない。
(※staticメソッドはインスタンスを作らなくても実行できてしまうため、抽象的なメソッドを修飾することはできない)

##staticメソッド
staticメソッドから、自クラスに定義されたインスタンスフィールドにアクセスすることはできない。
→コンパイルエラー発生!

staticメソッドはインスタンスを作らなくても実行できる。
インスタンス作成前にstaticメソッドからインスタンスフィールドにアクセスしてしまうのを防ぐためにコンパイルエラーが発生する。

元記事を表示

Java スレッド処理

#【Java スレッド処理編】

業務内で使用する Javaのスレッド処理のメモです。
開発時に使用しているのでまとめました。

##スレッドとは。

スレッド(thread)とは、プログラム上で複数の処理を同時に動かす仕組みである。

Javaには、複数の処理を同時に実行するAPIが備わっている。
→threadクラスを利用(スレッド生成)

・コンビニのレジを例に考えます。
昼休憩などで人がいっぱいで混雑時に、レジが1ヵ所だけだと時間がかかるし、不便。
レジが2ヵ所、3ヵ所と機能していれば短時間で人を捌けるし効率が良い。

プログラムも同じで処理を複数同時に動かせば、短時間で効率よく処理が可能になる。
その仕組みがスレッドです。スレッドは日常でもよく使われている。

##スレッド処理

###1、threadクラスを継承し、run( )メソッドをオーバーライドする。
run( )には、スレッドで処理したい内容を書き込む。

(オーバーライドとは、親クラスを継承して、子クラスを宣言時に親クラスのメンバを子クラス側で上書きすること)

###2、別スレッドの実行を開始したい場所で、①

元記事を表示

Javaの開発環境を作ろう(更新中)

# はじめに

新人エンジニアです。
会社でJavaを使って開発を行っているので、練習としてJavaの開発環境を構築することしました。
Javaってオワコンじゃね??って声が聞こえそうですが、まあ会社の標準フレームワークなので仕方ないですね。

コツコツ更新していくので、長い目で見守っていただけると嬉しいです。

# 環境

| 役割 | ツール名 |
|:-:|:-:|
| OS | WSL2 |
| エディター | VScode |
| Java | OpenJDK 8 |
| フレームワーク | Spring Boot |
| ビルド | Maven |
| テスト | JUnit |
| CI | Jenkins |
| コンテナ | Docker |
| コンテナ管理ツール| Kubernetes |

# Jenkinsコンテナを作る

今回はCI用ににJenkinsのコンテナを構築します。
注意点としては、Dockerイメージとして`jenkins/jenkins:lts`を使うこと。
`jenkins:latest`はプラグインのダウンロードで失敗します。(2

元記事を表示

OTHERカテゴリの最新記事