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

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

Google Photos APIsでフォトアルバム

私は普段Android端末を使っており、奥さんと旅行などに行った際よく写真を撮ります。
アカウントの同期を行っている方は、Android端末で撮った写真が自動でGoogleのPhotosサーバにバックアップされると思います。
[Google Photos APIs](https://developers.google.com/photos)が公開され、Google Photosサーバから直接画像を取得出来るようになったため、これを利用してフォトアルバムを作ろうと思ったのが本記事のきっかけです。

##はじめに
本記事では、[Google Photos APIs](https://developers.google.com/photos)を用いフォトアルバムを表示するWebアプリ(Spring-boot)を作成します。
ソースは、[Git](https://github.com/RioAkiyama/KarionPhoto) にあげております。
下図の様に指定期間範囲内に撮った画像を、指定の間隔で再生するよう実装しております。
![sample1.png](https://qiita-i

元記事を表示

【Java】変更に強いコード – 値オブジェクト1(Value Object)

変更に強いコードを書くための考え方を学びます

#変更に強いコードの5つのポイント
* **1. 変数名は説明になるようにつけよう**
* 入力、処理、出力の役割ごとに変数名を使う(説明用の変数を導入)
* **2. 目的ごとに変数を用意しよう**
* 計算した結果に対して変数を用意して、**使いまわさない**
* **3. コードは意味のある段落に分けよう**
* 入力、処理、出力に分ける
* **4. コードのまとまり(段落)をメソッドとして独立**させよう
* 異なるクラスでの重複コードはなくそう
* **5. 狭い関心ごとに特化したクラス(ドメインオブジェクト)にしよう**
* 凝集度up = あるクラスはある目的にのみ存在する
* ex: 送料クラスの関心事は送料のみ

#小さなクラスでわかりやすく安全に
* 5つのポイントをおさえ、**特定の関心に特化した小さなクラス**を作る
* メソッドは短く、クラスは小さく
* クラスの可読性up、変更が簡単になる
* 継承で共通機能は親クラスへ
* 派生クラス

元記事を表示

【Java】初心者のためのConcurrentModificationExceptionについて【Java Silver対策】

#はじめに

– この記事は駆け出しエンジニアが書いています。間違いがありましたら遠慮なくご指摘いただけると幸いです。
– この記事はJavaのArrayListにおけるConcurrentModificationExceptionについて超ざっくりと解説します

#この記事の対象者について
– Java Silver勉強中で、どういう場合に発生するのか確認したい方
– Javaでシングルスレッドのコードを書いていたらConcurrentModificationExceptionが出たのでとりあえず解決したい方。

*詳しい解説はすべて省いて、初心者の方でも分かりやすいように書いています。

#ConcurrentModificationExceptionについて
まだまだ駆け出しの筆者であるが、Java Se8 Silverの問題集をやっているとこんな問題が出た

*例

“`java.

//配列を宣言し「ABCDE」を要素として配列に格納
List list = new ArrayList();
list.add(“A”);
l

元記事を表示

JSP + Apache FOP で動的に PDF を作成して Web サイトに表示してみるサンプル

JSP サイトを管理している知り合いが「PDF を動的に作成して表示したい」と言っていたので、ちょっと試してみました。

# Apache FOP

PDF を動的に生成するライブラリは多くあります。有料のものですと [iText](https://www.xlsoft.com/jp/products/itext/) とか、複雑な帳票に向いていそうな [SVF](https://www.wingarc.com/cloud/svfc/) とか。

でも今回はあまり複雑でない PDF を作成するようですし、OSS での実装を検討してみました。コスト削減できますし、何かあったらソースコード読んで確認できるのは嬉しいものです。

まずチェックしたのが [Apache PDFBox](https://pdfbox.apache.org/) なのですが、あまりにプリミティブといいますか、そのまま作りこんでしまうとデザインの更新が難しくなりそうなので、パス。上にもうひとつコンテンツ作成レイヤが必要な印象です。

そして見つけたのが XSL ベースでコンテンツを作成する [Apache FOP](ht

元記事を表示

【Java】クラス・フィールド変数

#クラス・フィールド変数
Javaの勉強で、クラス・フィールド変数 について学んだことをアウトプットしていきます。

##クラス
クラスとは、「 データ 」と「 処理 」の集まりです。
Javaのプログラムは、クラスを複数組み合わせてプログラミングしていく。
Javaのプログラミングは **`クラスのプログラミング` と、`呼び出し側のプログラミング`**の2つの作業に分かれる。

###クラスのプログラミング
クラスには、**そのクラスが持つ特徴や情報などの`データ`**と、そのクラスで行いたいタスク、TODO、ふるまいなどの**`処理`**を書きます。

###呼び出し側のプログラミング
クラスが完成したらクラスのインスタンスを生成し、メソッドの呼び出しを記述する。

クラスのプログラミングの注意点は

– 必ず**`public class クラス `**と記述すること。
– **{ }の中に`データ`と`処理`を記述**すること。

この囲まれたコードのまとまりを**ブロック**という。

“`java

// ここからブロック範囲======================

元記事を表示

Google App Engine Java 8 から Java11 移行対策

この記事では、Google App Engine for JavaのJava8からJava11への移行方法について考えてみる
## Google App Engineとは
Google App Engine(GAE)は、Google謹製のPaaSサービスであり、Google Cloud Platformの中でも最古参級の古株である。
Go, Python, .NETなど様々な言語に対応しており、もちろんJavaにも対応している(GAE/J)。
## GAE Java11 からサーブレットコンテナではなくなった
2019年10月にこれまでのGAE Java 8版に加えて、GAE Java11版が正式リリースされた[^1]
だが、Java 11版のGAE/Jはこれまでのバージョンとは大きな違いがある。
[Google App Engine Java 11 ドキュメント – Java 11 ランタイム環境 – フレームワークの互換性](https://cloud.google.com/appengine/docs/standard/java11/runtime?hl=ja#framewor

元記事を表示

入力フォームの情報+複数枚の画像をバイト配列に変換する方法【Servlet/JSP】【MySQL】

#1.前提知識・条件
本記事では、Java、Servlet/JSP、MySQLなどの環境構築について、構築できている前提とするので省略します。
Java、Servlet,JSP、MySQLに関する基礎知識を前提としています。
必要となる知識
Java : リスト, イテレータ など
Servlet/JSP : GET/POST, データベースとの通信 など
MySQL : Javaのソース上でクエリを実行する方法 など

注意事項:冗長的なコードになっている可能性があるのでご了承ください。

#2.投稿のきっかけ
研修でServlet/JSP、MySQLを使ってWebアプリを構築することになり画像の処理が必要でした。
MySQLの方をMediumBLOB型にして、一枚の画像のみを格納・表示させる所までは、それなりに情報が載っており、比較的容易でした。
ですが、入力フォームのテキスト情報と一緒になった場合、画像を複数枚にした場合に情報が少なく行き着くまでにかなり苦労しました。
自分の備忘録としても、他の方の参考になれば良いかと思います(需要があるかは不明)。

#3.画像の保存
大まかな

元記事を表示

【Java】ループ文

#ループ文
##ループ文とは
ループ処理の主な機能は、 指定された回数分や特定の条件下にある間、処理を実行し続けること です。

Javaにおいては、for文、while文という繰り返し文の構文が用意されていて、Javaに携わる上では頻繁に使用する機能になります。

## for文
ループカウンタなどを使用して、**定められた回数だけ同じ処理を繰り返したいとき**に使用します。
ループカウンタと、添え字による配列要素へのアクセスは非常に相性がいいため、**配列の中身を単純に1つ1つ参照する場合などによく使用されます。**

###for文の書き方
書き方はこちらです。

“`
for (ループカウンタ初期化; 継続条件; ループカウンタ更新) {
繰り返し行う処理
}
“`
よく使われる内容として、配列の中を全部表示する方法があります。
下記の場合、**配列の番号**と**配列の値**をそれぞれ出力する方法です。

“`java
String[] type = { “ほのお”, “みず”, “くさ”, “いわ”, “でんき”, “どく”, “エスパー”,

元記事を表示

悲報 SpringBootは二度はまる。。

Spring Bootで久しぶりにREST APIを書いてみようとして「はまった」話。おそらくまたはまるので備忘

# はまりポイントの経緯
## Spring Bootをどれぐらい使ったことあるの?
キックオフミーティング用の簡単APIを作成するに1度使って。「お手軽」のイメージをもっていました。
今回OAuthの認証サンプル作ろうと、受け側のダミーサイトとして利用するつもりだったのですが。あっさりとはまりました。

## なにをやらかしたの?
Servlet Container が期待通り起動せず。エラーも出ないので途方に暮れた。

### まずはプロジェクトの作成
[SpringBoot Initializer](https://start.spring.io/)を使ってサンプルプロジェクトの作成しました。

### 実行してみましょう。
“`
> gradle bootRun
“`
と。。さて、Tomcat 起動してくれるよね。。。

“`
> Task :bootRun

. ____ _ __ _ _
/\\ / __

元記事を表示

空の ArrayList を新規生成するラムダ式

# Want
ファクトリメソッドとして空のArrayListを新規作成する Lambda 式を渡したいとき、次のようなラムダを渡すと Sonarqube や IntelliJ 等に “Replace this lambda with a method reference.”や”Lambda can be replaced with method reference.” というように直接実装を書くんじゃなくてメソッド参照にしろと怒られる。

“`
() -> new ArrayList()
“`

# Do
次を渡せばOK。

“`java
ArrayList::new
“`

# Don’t
空のArrayListを用意したあとでそのインスタンスに要素を追加していく場合、次はアウト。

“`java
Collections.emptyList()
“`

## Why
Collections.emptyList() で生成したリストは、基本的に操作できません。
add メソッドなどを呼び出すと `UnsupportedOperationException` が発生します。

元記事を表示

【Java】制御文 ( if, else, else if, switch )

#制御分とは
読んで字のごとく「プログラムを制御する文」 ですがプログラムの制御は「分岐」と「繰返し」の2つに分類できます。

– 「分岐」には、if文とswitch文の2つの構文
– 「繰返し」には、for文とwhile文、do-while文の3つの構文が存在します。

##if文
if文 は、括弧の中の条件によって処理の流れを分岐させます。
**条件式の判定がtrueのときに実行する処理を記述します。**それ以外の時には処理は行われない。

“`
if (条件式) {
条件式が true の場合に行う処理
}
“`
##else文
else文 「それ以外」の場合、つまり**if文の条件式の判定がfalseのときに実行する処理**を記述します。

“`
if (条件式) {
条件式が true の場合に行う処理
} else {
条件式が false の場合に行う処理
}
“`
##else if文
else-if文 は、**if文の条件式の判定結果が false だった場合に、別の条件式を付け加えて判定が行われます。**
そして、else-if

元記事を表示

【Java】拡張for文の使い方

#プログラミング勉強日記
2020年11月19日
Javaの拡張for文の使い方をまとめる。

#拡張for文とは
 配列やコレクションといった複数の要素を持っているものからすべての要素に含まれる値を順番に取り出して処理するために使われる。
 値を順番に取り出したい配列やコレクションと、取り出した値を格納する変数を`:`(コロン)で区切って記述する。繰り返される回数は配列やコレクションに含まれている値の数なので条件式と変化式は必要ない。

##for文との違い
 for文は指定した条件で繰り返し処理を実行するときに使い、繰り返す処理の内容を指定できる。
 拡張for文はコレクションのすべての要素に対して繰り返し処理をするときに使用できて、for文をより簡単に書ける。

“`java:基本的な書き方
for (データ型 変数名: コレクション){
実行する文1;
実行する文2;
}
“`

#配列でのfor文と拡張for文

“`java:for文
public class Main {
public static void main (String[] args)

元記事を表示

【Java】変更に強いコード – 変数名・メソッド化

変更に強いコードを書くための考え方を学びます

#目的ごとに変数を用意しよう
* 計算ロジックに意識が向き過ぎると変数名のことを忘れる
* **入力、処理、出力の役割ごとに変数名を使う** (説明用の変数を導入)
* **一個の変数を使いまわさない**
* ロジックを変更しにくい。長い目で見ると副作用が伴う
* **Immutable**に書くことができる
* オブジェクトを更新せずに別の目的のオブジェクトが必要な時に新しいオブジェクトをつくること(Immutableなオブジェクト)

“`java
//目的ごとにローカル変数を使う
class Main {
public static void main(String args[]) {
int unitPrice = 1000;
int quantity = 3;
float tax = 10;
int basePrice = unitPrice * quantity;
int shippingCost =

元記事を表示

【Java】演算子まとめ

#演算子
##演算子の種類
プログラミングで使用される演算子は以下のように種類があります。

– 算術演算子(計算式に使われる)
– 代入演算子(計算式に使われる)
– 比較演算子(条件式に使われる)
– 論理演算子(論理式に使われる)

使う演算子によって以上のように様々な「式」をつくることが出来ます。

##算術演算子
算術演算子は足し算引き算などの計算を作る演算子です。

| 記号 | 機能 |
| —- | —- |
| + | 加算 |
| – | 減算 |
| * | 乗算 |
| / | 除算 |
| % | 余剰 |

###算術演算子を用いた計算
算術演算子を用いて作った計算式がこちらです。

“`java
System.out.println(3 + 2);
“`

実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613675/fd60e2a4-0533-5b4d-0939-bc0760fa02f8.

元記事を表示

eclipseでwhere we looked for ~~~とエラーが出る

#eclipseでのエラーは沢山あるが今回はタイトルに書かれているエラーについて解決策を紹介させていただく
確認すべきことがいくつかあるが一つ目が**eclipseのヘルプ→Eclipse IDEについて→インストール詳細→構成**→
**vm-
hogehoge(25行目あたり)**に書かれているのが

“`
-vm
C:\・・・JREのパス・・・\bin\server\jvm.dll
“`
だと、タイトル通りのエラーになることがわかっている。 要するに、JDKを探しているのに、上記の例ではvmがJREに設定されているため、JDKを見つけられないというエラーが起きるわけだ。
***
次に、windowsのコマンドプロンプトに**java -version**と打ちこむ。エラーメッセージが表示されるようだと、JDKがインストールされていないことが確認できる。
その場合は[こちらの優秀なサイト](https://eng-entrance.com/java-install-jdk-windows)を一読した後、こちらに載せられているリンクからOracleの公式ダウンロードページへ飛んで

元記事を表示

Springを使ってトークンをイントロスぺクトしてみる

Oauth2の[Client Credentials Grant](https://oauth.net/2/grant-types/client-credentials/)という認証方法があります
サーバー間の通信を行い、また認証したい場合に基本的にUIがないので、
Client Credentials Grant方式で認証を行うケースが多いです。
例えばリソースサーバーと認証サーバーが分離している場合に、
リソースサーバーは認証サーバーに問い合わせ、トークンの有効性を確認する必要があります。
今回はこの`トークンの有効性を確認する`という行為をどうやって実現できるかについて紹介します。

## 1 RFC7662

実は、`トークンの有効性を確認する`の規定はすでにRFC7662で定義されています。
有効性をチェックするときのエンドポイントは`/introspect`になります。
いくつかの概念について紹介します

### 1.1 introspect request

リソースサーバーが認証サーバーにイントロスぺクトする際に必要な情報。

| 項目 | 値

元記事を表示

Effective Java 項目1 「コンストラクタの代わりにstaticファクトリメソッドを検討する」

自分用メモなので雑です。

コンストラクタはこういうの
`public Human`の部分
(フィールド持たない場合は、何も書かなくてもデフォルトのコンストラクタが生成される)

“`java
class Human {
String name;
public Human(String name) {
this.name = name;
}
}
“`

コンストラクタを呼ぶ = クラスのインスタンスを生成しても取得する

“`java
Human human = new Human(“yamada”);
“`

staticファクトリメソッドを用意してコンストラクタからはHumanを生成できないようにするとこうなる

“`java
class Human {
String name;

// クライアントが、createHumanからしかHumanを作れないようコンストラクタはprivateにしている。
private Human(String name) {
this.name = n

元記事を表示

社内業務のシステムをWebで作ろう!

##投稿の動機
@NP_Systemsさんの **製造業において、Pythonに加えてWebも活用して飛躍しよう** の記事を見て正にキャッチ‐な話題でしたので、社内での活動状況を投稿しようと思いました。現在私は定年後の再就職先として広島市内の名盤製造業に嘱託として勤めています。仕事内容は社内業務システム「業務支援・改」の構築・保守です。
##何故Webなのか
今のシステムは経理・給与・販売管理(移行開発中)を除く、製造業務のほぼ全般をWebシステムで運用しています。巷では業務システムはクライアント・サーバータイプ(VB, VC, Java 等)で作られているみたいですが、かなり早い段階からWebで開発している身としては、楽なのに何故Webで開発しないのかが不思議でした。実際WebでVBよりも高速な伝票入力画面を作ることができます。現役時代に納品したシステムはOSのバージョンアップを行っても問題無く使えていますし、カーソル移動も[Enter]キーで[tabIndex]順に移動できます。端末へのインストールも不要で遠地の端末が壊れても簡単に機器の入れ替えができます。ハードを更改してもシス

元記事を表示

javaのラムダ式について理解する[入門]

普段から何気なくラムダ 式記法を使って実装をしていますが、ラムダとはそもそも、どういう仕組みになっているのか改めて調べてみました〜。

## Javaのラムダ式とは

Javaのラムダ式とは、ざっくり言ってしまうと、`メソッドが1つしかないインターフェイスを簡単に実装するための記法`です。

色々記述を省略した結果として、ラムダ記法が生まれているので、
本来、ラムダ式を使わずに書くとしたらどうなるのか?というところから説明を始めます。

## サンプル1

“`java:CalculatorInterface.java
public interface CalculatorInterface {
public int calculate(int a, int b);
}
“`

“`java:MultiplyCalculator.java
public class MultiplyCalculator implements CalculatorInterface {
@Override
public int calculate(int a, int

元記事を表示

【Java】配列について

#配列

勉強のメモとして、配列について学んだことをメモります。

##配列とは
プログラミング言語には、「いくつかの関係のあるデータをグループにして、まとめて1つの変数として扱う」仕組みががあり、それを配列と呼ぶ。

##配列操作
配列にはその変数が保持する特定の値や値全体に対して行える機能があり、

– 取り出し
– 書き換え
– 削除

これらを総称して「配列操作」と呼ぶ。

##配列の作り方
###書き方
**結論からいうと配列の作り方は以下です。**

“`
要素の型[] 配列変数名 = new 要素の型[要素数];
“`
なぜそういう書き方になるかというと、**配列を作るためには、`配列の宣言`、`要素の代入`の2つ手順が必要です。**
例として得点という意味の「score」を配列変数名にして配列を宣言する場合はこうなります。

“`java
int[] = score;
score = new int[100];
“`

###1. 配列の宣言
配列の宣言の仕方はこちら。

“`
要素の型[] = 配列変数名;
“`
scoreという配列を宣言するとこうなり

元記事を表示

OTHERカテゴリの最新記事