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

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

【Java】関数型インターフェース/ラムダ式

#ラムダ式とは
* **メソッドを受け渡しするための構文**

##ラムダ式を使わない場合
* 与えられた文字列から個々の要素を取り出して前後にブラケットを加えて出力したいとき

“`java
public class MethodRefUnuse {
//文字列内容をブラケット付きで出力
public void walkArray(String[] data) {
for (var value : data) {
System.out.printf(“[%s]\n”, value);
}
}
}
“`

“`java
//文字列配列dataの内容を順に出力
public class MethodRefUnuseBasic {

public static void main(String[] args) {
var data = new String[] { “春はあけぼの”, “夏は夜”, “秋は夕暮れ” };
var un = new MethodRefUnuse();
un.walkArray(data);

元記事を表示

DBUnit入門

## DBUnitとは
データベースの参照や更新を行うクラスの単体テストのテストプログラムを作成するのにいろいろ苦労することが多いと思います。
単体テストのデータベース確認には以下のような問題が発生しがちです。

* テストのためのデータをDBに投入したり、テスト後にデータを削除してDBを元に戻す作業に時間がかかる
* 「テストデータの投入と後片付け」でプログラムが複雑になり、保守性が下がる。とにかく、他人が書いたテストプログラムは読めない、直せない。
* プログラムが複雑になるため、本当に正しくメソッドを実行し評価しているのか、わかりづらい。

そこで、“`DBUnit“`と呼ばれるフレームワークを紹介します。
DBUnitとは、データベースを操作するクラスのテストプログラムを作成するためのフレームワークで、JUnitを拡張しています。

* テストデータをDBに投入する機能
* DBの後片付けをする機能
* メソッド実行後のDBの状態を確認する機能

などの機能を備えています。この章では、DBUnitを使用して、データベース処理を行うテストクラスを説明する方法について、説明しま

元記事を表示

Pythonの学習!Javaとの比較(基本の関数)

#はじめに
Pythonの学習を始めたため、習得したJavaと比較していきたいと思います。

#print関数

“`python
print(‘こんにちは’)
print(“こんにちは”)
“`
実行結果
![スクリーンショット 2020-11-09 150744.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/98fb9683-3957-fb23-f12b-418e002aac59.png)
Javaの場合

“`java
System.out.println(“こんにちは”);
“`
#コメントアウト
“`python
#コメントアウト
print(‘コメントは表示されません’)
“`

Javaの場合

“`java
//コメントアウト
System.out.println(“コメントは表示されません”);
“`
#変数
“`python
name = ‘佐藤’
age = ’20’
print(name)
print(age)
“`
実行結果
![スクリーンショ

元記事を表示

title test edited 4

content test

元記事を表示

【Java】ジェネリクス

#ジェネリクス(Generics)とは
* 任意の型を受け付けるクラス・メソッドに対して**特定の型を割り当てて、型専用のクラスを生成する機能**
* これで**メンバー要素の型をコンパイル時に保証**できる
* ジェネリック型を定義する
* **`class クラス名<型パラメータ,...>{クラス}`**
* ex:型パラメータEを宣言 `public class ArrayList extends AbstractList{`
* **型パラメータ**:特定の型を受け取るための宣言<...>の部分
* インタンスにに任意型を割り当てる
* **T(Type)**・**E(Element)**・**K(Key)**、**V(Value)**
* **型変数**:型パラメータ内で宣言された型のこと
* インスタンスメンバーの引数/戻り値
* ローカル変数の型
* ネストした型
* ジェネリクスではインスタンス化の際に、ArrayListが生成され

Prototype Pattern

#Prototype Pattern
インスタンスをコピーして使う

このページでは
・Prototype Patternの確認
・Mapコレクションにインスタンスを格納して使う
について記載します

[Design Pattarm MENU](https://qiita.com/old_cat/items/852d980bedb9100dd7e3)

##Prototype Patternの確認
以下のクラス構成で確認します

|クラス|説明|
|—–|—-|
|samPrototype.class|自分の複製を作るメソッドを持つ|
|user(Main.class)|動作を確認|

clone()メソッドを使う場合には、java.lang.Cloneableインターフェイスを実装します

それでは確認します

“`java:samPrototype.class
class samPrototype implements Cloneable{ // java.lang.Cloneableを実装する

以前から作ってるソフトで…

高校時代のとある時期…土地区画整理見たいな計画図をずーっと夜
模索しながら絵にしていた。

ずーっとあーでもないこうでもないと、模索を続けていた。

例えば、ここに学校を作って…とか?
養豚場を作って自給自足の村を作ろうとか…。

それで、僕は行き詰った。

いくら、良い街を設計しても、情報処理の部分がしっかりしないと
都市はまとまらないってことに…。

しかも、情報の共有が徹底されれば
あえて街をうまく設計しなくても、ある程度
都市はうまく回っていくなぁと…。

問題は、情報共有の部分だなぁ…。

それ以来、43歳になった今迄、それが心の中でどういう
形のソフトウェアになるのかっていうのを、考え続けていた。

僕は結局、これを作るべきだろうなー!!って思ってたけど
手を付け始めた頃…!?

なんと今世紀最大か!?っていうような人類的危機の
コロナウィルスによるパンデミック…。

言わんこっちゃない…。

僕は今まで頭の中でずーっと考えていた、情報共有というものが
いわば世界的に、重要視されるという事態になっていく事実を
目の当たりにしていた。

リモートアプリ、ユーチューブ、ツイッタ

Javaで学習してきたこと(その3)命令実行の文

#Javaの振り返り
前回Javaにおける変数について投稿させていただきました。
よろしければそちらの記事もご覧ください。
[Javaで学習してきたこと(その2)変数とは](https://qiita.com/adgjmptw0/items/96c9703e126b6b326e3a)

今回は命令実行の文について書いていきたいと思います。
#命令実行の文とは
命令実行の文とはJavaが元から準備してくれている命令文です。
命令実行の文の基本的な形として
####呼び出す命令文(引数)
となります。※丸カッコ内の情報を引数(ひきすう)またはパラメータと呼ぶ。
##コンソールへ表示
具体的なものの一つとして、以前の記事などでも用いられている「System.out.println()」

“`java
public class Main {
public static void main(String[] args) {
System.out.println(“こんにちは”);
}
}
“`
実行結果
![スクリーンショット 2020-11-09 111752.png](http

Singleton Pattern

#Singleton Pattern
一つしかインスタンスを生成しない

このページでは以下を記載します
・Singleton Pattern サンプルコード

[Design Pattarm MENU](https://qiita.com/old_cat/items/852d980bedb9100dd7e3)

##
以下のクラス構成で確認します

|クラス|説明|
|—–|—-|
|singleton.class|インスタンスを一つだけ生成する|
|user(Main.class)|インスタンスを生成する|

“`java:singleton.class
class singleton{
private static singleton singleton = new singleton();
private singleton(){}
public static singleton newInstance(){return singleton;}
}
“`
“`java:user(Main.c

AtCoder Beginner Contest 182 参戦記事

[AtCoder Beginner Contest 182](https://atcoder.jp/contests/abc182)に20分ほど遅れて参戦。
まあ時間通りでも最後まではいけないので、やれることをやる。

###[A – twiblr](https://atcoder.jp/contests/abc182/tasks/abc182_a)

ルール通りフォロー数の上限を計算し、現在のフォロー数を引くだけ。

“`java
import java.util.*;

public class Main {
public static void main(String[] args) {
try(Scanner s = new Scanner(System.in)){
System.out.println(s.nextInt() * 2 + 100 – s.nextInt());
}
}
}
“`

###[B – Almost GCD](https://atcoder.jp/contests/abc182/

JavaからRustをJNA(Java Native Access)で実行する

## はじめに
### 動機
システムプログラミング言語(?)であるRustの話を聞いていると、FFI([Foreign function interface](https://ja.wikipedia.org/wiki/Foreign_function_interface “FFI”))の話が少なからず出てきます。
ということで普段書いているJavaから呼び出します。

### 対象読者
JavaとRustが多少読め、MavenというJava用のプロジェクト管理用ツールが存在していることを知っている方。
難しいことはしておらず、プロジェクトの雛形を作成したレベルの話です。

## 環境
開発環境はVSCodeを使用します。
RustとJavaの実行環境はDockerで構築します。
**DockerFiile**
ベースはMicrosoft提供のJavaの開発環境のサンプル(Debean 10)を、フォークして自分用に弄ったものを使用しています。変更箇所としてはJavaのversionを14→11に変更した程度です。
[弄ったもの](https://github.com/uesugi6

ゼロから始めるSpring Boot その2

####目標
複数回に分けて実施予定です。

1. SpringBootとは何かをざっくり知る
1. 環境構築&Hello World!を表示させる
1. **パラメータやオブジェクトの受け渡しをする** ←今回やること
1. 他の機能にも触れてみる

####前置き
前回はHello Worldを表示するために下の2つをやりました。

– `@RestController`で文字列を表示
– `@Controller`でindex.htmlを表示

プロジェクトは前回作ったものを引き続き使用します。

具体的には以下のようなことをやります。
【Java】H2DB・JDBCの関係

#H2 Database特徴
* H2のメリット
* **Javaのプログラムに組み込めること**
* **Embedded and server modes; in-memory databases**

> The main features of H2 are:
> – Very fast, open source, JDBC API
> – Embedded and server modes; in-memory databases
> – Browser based Console application
> – Small footprint: around 2 MB jar file size

|| H2 |Derby| HSQLDB | MySQL | PostgreSQL |
|:-:|:-:|:-:|:-:|:-:|:-:|
| Pure Java | Yes | Yes | Yes | No |No|
| Memory Mode | Yes | Yes | Yes | No |No|
| Encrypted Database

【Java】リクエストを投げて画面を表示②(GET/POST)

# リクエストを投げて結果を画面を表示(thymeleaf)
**(ゴール) htmlのフォームでPOSTされた値(姓名)を埋め込んで画面に表示**

“`
Project Root
└─src
└─ main
└─ java
└─ com.example
└─ demo
└─trySpring
└─HelloController.java
“`

“`
Project Root
└─src
└─ main
└─ resources
└─templates
└─hello.html

└─helloResponse.html
“`

##GETでhello.htmlに画面遷移する
* 入力フォーム作成

“`html:hello.html

いつもintな初心者のBigDecimal備忘録

## はじめに
Java学習歴3ヶ月の者です。
研修でSpringをやっているのですが、データ型がNumberのものは
整数にしかならないものもintではなくBigDecimalを使いました。
数値といえばintかdoubleしか使ってこず、BigDecimalの処理にとまどいました。
BigDecimalについてきちんとまとめられている記事は多くありますが、
実際使ったものだけ備忘録としてまとめてみます。

## 計算したい
四則演算は「+」、「-」、「*」、「/」ではありません。

| 演算 | メソッド | 例 |
|:———-:|:———:|:————:|
| 加算(A + B)| add | A.add(B) |
| 減算(A – B)| subtract | A.subtract(B)|
| 乗算(A * B)| multiply | A.multiply(B)|
| 徐算(A / B)| divide | A.divide(B) |

徐算は使ったことないですが、少数になる場合は引数が3つ必要です。
A

Factory Method Pattern

#Factory Method Pattern
packageが異なるケースなど、newでインスタンスを生成できないケースでは、Factory Method Patternを利用して、インスタンスを取得する
factory抽象クラスはインスタンス化する骨組みを定義し
factory抽象クラスのサブクラスが実際のインスタンスを生成する
userはfactory抽象クラスを通じてインスタンスを受け取る

[Design Pattarm MENU](https://qiita.com/old_cat/items/852d980bedb9100dd7e3)

このページは下記の構成となってます
コードを確認するだけなら2番目に飛んでください
・new でインスタンスを生成できないケース
・Factory Method Pattern の確認

##new でインスタンスを生成できないケース
以下のクラス構成で確認します

|パッケージ名|クラス|アクセス修飾子|説明|
|—–|—–|—–|—–|
|D

CheckStyleの対応

[Javaの開発環境メモ](https://qiita.com/kero3/items/2a22c786b89aa7e8dcf8)
で開発環境を構築しているが、CheckStyleでアラートが大量に出ているので、その対応方法を調べて記載していく。

# 1.CheckStyle

## 1-1.pomの設定

“`xml:pom.xml org.apache.maven.plugins
maven-checkstyle-plugin
3.1.1


com.puppycrawl.tools
checkstyle
8.37

【Android/Java】Fragmentに戻るボタンを設置する

## はじめに
フラグメントでの戻るボタンの設置において、
親Activity内で定義して呼び出す書き方にしていたのですが、
Activityに置かずに各Fragmentから直接中身を呼び出すほうがいい
と、ベテランエンジニアから指摘をいただいたので備忘録として両パターン残しておきます。

## ①MainActivityから呼び出す方法
“`java:MainActivity.java
public class MainActivity extends AppCompatActivity {

// 戻るボタンを定義
public void setupBackButton(boolean enableBackButton) {
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(enableBackButton);
}
}
“`

“`java:Fragment1.java
// onCreateView内で呼び出す

Javaのインターフェースについて

## Javaのインターフェースの特徴
インターフェースの特徴として以下の2つが挙げられる

– インターフェースはインスタンスフィールド(インスタンス変数)を持つことが出来ない
– 具象メソッド(抽象メソッドではないメソッド)を実装することができない

### interface はインスタンスフィールドを持たない
インターフェースでは、フィールドを宣言しようとすると`public static final`のように定数を宣言したものとして扱われる。

### 具象メソッドを実装することが出来ない
抽象メソッドしか定義することが出来ず、interfaceは実装された場合インスタンスが生成された場合には抽象メソッドは必ずオーバーライドされる必要がある。

### おまけ
各クラスの共通化のために、インターフェースの代わりにクラスを作成するときに注意が必要。各クラスが何かしらのサブクラスである場合、共通化してクラスにしたものを継承することは出来ない。なぜなら、Javaでは、スーパークラスは1つしか持てない。
 インタフェースであれば、複数実装することは可能。

Template Method Pattern

#Template Method Pattern
templateで処理の大枠を決めてロジックを共有する
サブクラスではtemplateで決た枠に従い処理を行う

[Design Pattarm MENU](https://qiita.com/old_cat/items/852d980bedb9100dd7e3)

##Template Method Pattern 例
以下のクラス構成で確認します

|クラス|説明|
|—–|—-|
|template.class|処理の大枠を記述する|
|sam1.class|処理の詳細を肉づける|
|sam2.class|処理の詳細を肉づける|
|user(Main.class)|Template Patternの動作を確認する|

“`java:template.class
abstract class template{
abstract String temp1();
abstract String temp2();
abstract String temp3();