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

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

JUnit5のParametrisedTestの@ValueSourceを使う

# 概要

このエントリは、JUnit5で単体テストを書くとき、パラメータを変えたテストを書くのを楽にしてくれる「ParametrisedTest」の「@ValueSource」を使用する方法を書きます。

[Enterprise電卓を作る Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ehw_calculator)の2日目のエントリです。

## 想定読者

– JUnit4には慣れているけれどもまだJUnit5のお便利機能を使っていない方。

# JUnit5のParametrisedTest

JUnit5は、JUnit4を大幅刷新したテストフレームワークです。ばっさり削除された機能もあれば、新たに追加になった機能もあります。

新たに追加になった機能の中に「[Parameterized Tests](https://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests)」があります。これは、一つのテストケー

元記事を表示

Spring Bootでアプリ作成

現在SpringBootのアプリを作成中。
とりあえず環境構築して、アプリ起動のところまで行けたのでメモ。
個人用のメモ用にアウトプットします。

## STSのダウンロード
・Spring Bootの開発進めるために専用のエディターをインストールする。
 手順は以下を参照。
 https://qiita.com/andna0410/items/e9cc07c9e2e34a542245
~~・オプションでLombokをインストールする。
 手順は以下を参照。
 https://qiita.com/t-iguchi/items/a0c88df01b6a601afbed~~

## プロジェクト作成
●「ファイル」→「新規」→「その他」→「Spring Boot」→「Spring スターター・プロジェクト」
 1.png

元記事を表示

CompletableFutureの公式ドキュメントを読んでも分からないので Java逆引きレシピを片手に理解する 

#
この記事はチームラボエンジニアリングの9日目の記事です。

本記事ではCompletableFutureについて書きます。

# 背景
CompletableFutureの公式ドキュメントを呼んでも分からないので
Java逆引きレシピを片手に理解する

# 参考URL 参考書
[CompletableFuture 英語版Java11](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/CompletableFuture.html)
[CompletableFuture 日本語版Java8](https://docs.oracle.com/javase/jp/8/docs/api/java/util/concurrent/CompletableFuture.html)
[Java逆引きレシピ](https://www.amazon.co.jp/Java%E9%80%86%E5%BC%95%E3%81%8D%E3%83%AC%E3%82%B7%E3%83%94-%E7%

元記事を表示

【Java】Stream APIを使って複数のリストから条件を絞ったリストを生成する

#データ例
次のようなデータを用意します.

**Staffリスト**

|name|rollType|
|:–:|:——:|
|佐藤|1|
|鈴木|2|
|高橋|3|
|田中|4|
|伊藤|5|

**Rollリスト**

|rollType|owner|
|:——:|:—:|
|1|true|
|2|true|
|3|false|
|4|false|
|5|false|

DBではよく見る構造ではないでしょうか.
ownerがtrueであるrollTypeをもつStaffのリストが欲しい時,どうしますか?
「DBからINNER JOINで持って来いよ」と思いますが,今回は独立にリストが存在することを仮定します.

実際に用意したリストは次のようになります.

“`java:list.java
List staffList = new ArrayList<>();
staffList.add(new Staff(“佐藤”, 1));
staffList.add(new Staff(“鈴木”, 2))

元記事を表示

executeBatchの戻り値の内容が11gと12cで異なる

# 実行環境

本記事を書くにあたって、利用した主なソフトウェアのバージョンは次の通りです。なおOracle Databaseの構築にあたってはDockerおよび[Oracle公式のDocker Image](https://github.com/oracle/docker-images)を利用しています。

|software|version, edition|
|—|—|
| Oracle Database 11g | Oracle Database 11g Express Edition Release 11.2.0.2.0 – 64bit Production |
| Oracle Database 12c | Oracle Database 12c Standard Edition Release 12.2.0.1.0 – 64bit Production |
| ojdbc6.jar (11g JDBC Driver) | Oracle 11.2.0.2.0 JDBC 4.0 compiled with JDK6 on Sat_Aug_14_12:18:34_PDT

元記事を表示

Javaエンジニアが今さらRubyの基礎文法を覚えるために対比した その1(基本、変数編)

# はじめに
別の思想の言語を覚えるなら差分で覚えるのが早いのではないかと思って、Rails始める前に基礎文法やり直そうチートシートみたいなのを作成すると覚えるやろ的な発想です。

色々と不足はあるとは思いますが、とりあえず今考えて必要かなと思ったところだけにしてるので、ご了承ください。
書くことが多いため記事は分割しまくります。

つっこみは大歓迎です。

# 環境
[paiza.io](https://paiza.io/)でこういう時は実行すると楽です

これを作った時のバージョンは以下です。バージョンは[ヘルプ](https://paiza.io/help?locale=ja-jp)から確認できます。

Ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
Java openjdk version “12” 2019-03-19

# コメント
コメントの書き方について

“`Java
// 1行の場合

/*
複数行の場合
*/
“`

“` Ruby
# 1行の場合

=begin
複数行の場合
=en

元記事を表示

Swift Network.framework Study 20191210「Bonjour Browse」

# Study

Network.framework
Study:「Bonjour Browse」

## 環境
Client:Java、NetBeans、jmdnsライブラリ
https://github.com/jmdns/jmdns
Server:Swift、Xcode

# Client Source Java

“`java
package example.java.network;

import java.net.InetAddress;

import javax.jmdns.JmDNS;
import javax.jmdns.ServiceInfo;

public class ExampleBonjourCreateService {
public static void main(String[] args) {
try {
// Create a JmDNS instance
JmDNS jmdns

元記事を表示

[Java11] Stream 使い方まとめ -基本編-

## はじめに

Javaを書いて2年ほど経ちまして、最近ではJava11で実装をしています。Java8から9,10を経て[Stream](https://docs.oracle.com/javase/jp/11/docs/api/java.base/java/util/stream/Stream.html)や[Optional](https://docs.oracle.com/javase/jp/11/docs/api/java.base/java/util/Optional.html)にもいくつかのメソッドが追加されています。
現在の開発ではOptionalを本格的に取り入れたりと、Stream,Optionalをより有効に活用できる環境になりました。

それとは別に「これってStreamで書けますか?」「ここStreamで書きたいんですけど…」と聞かれることも多かったり…
他の人のコードを見て、Streamだったらもっと綺麗に書けるのにと思ったり…

いずれにしろもっと積極的にStreamで書いて欲しい!(なぜStreamで書いて欲しいのかは[こちら](https:/

元記事を表示

BOX SDK(java)で同名ファイルの上書きアップロード

# BoxFolder.uploadFileだと既に同名のファイルが存在する場合にエラーになる
上書きオプションとかあればいいんですが・・・。

“`
// ファイルをルートフォルダにアップロード
BoxFile.Info newFileInfo = null;
try (FileInputStream stream = new FileInputStream(“C:\\hoge\\updload_sample.txt”)) {
newFileInfo = rootFolder.uploadFile(stream, fileName);
} catch (BoxAPIResponseException e) {
System.out.println(“LocalizedMessage : ” + e.getLocalizedMessage());
// 既に同名ファイルが存在する場合
if (e.getLocalizedMessage().contains(“409”)) {
  // 該当ファイルを捜索
Iterator ite = rootF

元記事を表示

Spring Data JDBCの使い方メモ

# Spring Data JDBCの使い方メモ

## はじめに

### 概要

今までMyBatis3を使ってきましたが、自動生成したソースコードのバージョン管理に悩まされていたので別のSpring周りのO/Rマッパーを探していました。そこで[この資料](https://www.slideshare.net/masatoshitada7/java-or-jsug)にあるSpring Data JDBCを知り、自分がよく使う機能拡張の部分についてメモに書き起こしました。

### 環境

Java 11
Gradle 5.4.1
Spring Boot 2.2.1.RELEASE
Spring Data JDBC 1.1.1.RELEASE

## 導入方法

### プロジェクト作成

[Spring Initializr](https://start.spring.io/)で以下の内容を選択し、プロジェクトをダウンロードします。

| 項目 | 選択内容 |
| — | — |
| Project | Gradle Project |
| Language | Java

元記事を表示

【Java/Kotlin】unbescapeでHTML5対応のエスケープ(サニタイズ)処理をする【SpringBoot】

# やること
`HTML`テンプレートのマクロ文字列をパラメータで置換する際のエスケープ処理をやります。

# やり方
この記事では`unbescape`を用います。

`HTML5`対応が明示されていませんが、`Apache Commons Text`を用いる方法なども有ります。

## 導入
このライブラリは`spring-boot-starter-thymeleaf`に入っていたため、`SpringBoot`関連のものを入れていれば何もする必要が無いかもしれません。
一応ですが、`Maven`のリポジトリは以下です。

– [Maven Repository: org\.unbescape » unbescape](https://mvnrepository.com/artifact/org.unbescape/unbescape)

## エスケープする
以下の記事を参考にエスケープ処理をやってみました。

– [JavaScriptでHTMLエスケープ処理 \- Qiita](https://qiita.com/saekis/items/c2b41cd894092386379

元記事を表示

startsWithメソッド/endsWithメソッド、splitメソッド、appendメソッド

初学者ですが、個人的な勉強のためまとめました

##startsWithメソッド/endsWithメソッド

・文字列が引数で指定された文字で始まるか(終わるか)どうかを調べるためのメソッド
・調べた結果は**真偽値**で返される

##splitメソッド

・文字列を**分割**するためのメソッド
・分割する箇所は、**正規表現**で指定

##appendメソッド

・文字列に新しい文字列を追加する**StringBuilderクラス**のメソッド
・文字列リテラルと変数の値を使って動的に文字列組み立てるときに使う
 ※**リテラル**・・・ソースコード内で変数に代入される**値**のこと
・オーバーロードされ、様々な種類の引数を受け取ることができる
 ①**プリミティブ型**(8種類すべて)
 ※**プリミティブ型**・・・boolean、char、byte、short、int、long、float、double
 ②**String**
 ③**char配列**
 ④**オブジェクト**
 など

・プリミティブ型はすべて文字列に変換。例えば、trueという真偽リテラルは”tr

元記事を表示

JavaからKNPを呼び出すWrapperを作った

# 3行でわかる記事の内容
* JavaからJuman++, KNPを呼び出すWrapperを作った
* マルチプロセスで走らせるので~~マシンパワーがあれば~~複数文を高速に処理できる
* 結果のparseは自前で実装したParserを用意すれば任意のクラスに変換可能

# 概要

最近はNLP界隈にもDeepの波が押し寄せてきているので「今どきKNPとか使わないよ」という方もいるかもしれません。
とはいえ、まともなデータが無くてよくある手法が使えない、とかDeepな手法を試す前にとりあえずルールベースでどれくらいの結果になるのか試したい、みたいなときには格解析結果や各種Featureなどの豊富な情報を得られるKNPは未だに重宝する存在です。

その一方で、Sudachiのようにライブラリとして使えるわけではないので(pyKNPがあるPython以外の言語では特に)プログラム内で使うのが地味に手間だったりします。

というわけで今回はJavaからKNP(とJuman++)を呼び出すWrapperライブラリを作りました。
Mavenリポジトリに公開するところまでやっておきたかったのです

元記事を表示

Javaのアノテーションを自作する

# アノテーションとは
クラスやメソッド、パッケージなどに対して付加情報を付与する機能。

## アノテーションを自作する
“`java
import static java.lang.annotation.ElementType.TYPE;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Target;

@Retention(RUNTIME)
@Target(TYPE)
public @interface TestAnnotation {
String testValue();
}
“`

### `@Retention`
アノテーションの情報が保持される範囲を指定します。

– `SOURCE` コンパイラによって破棄される。
– `CLASS` コンパイラによってクラスファイルに記録されるが、実行時には読み込まれない。(デフォルト)
– `RUNTIME` コンパ

元記事を表示

JavaでArduinoを動かしてみた!

### はじめに
[ラクス Advent Calendar 2019](https://qiita.com/advent-calendar/2019/rakus)の10日目です。
昨日の記事は@choreiさんの[Vuetify公式ドキュメントの読み方](https://qiita.com/chorei/items/d2390b58a342f0c314eb)でした。

今回の記事は、JavaのプログラムでArduinoを動かしてみたお話です。
[Oracle Code One 2019 報告会](https://jjug.doorkeeper.jp/events/98354)で聴講したセッションに触発されて、Java + Arduinoで色々試してみました。

### Arduinoとは
本題に行く前に、Arduinoについて軽く説明します。
Arduinoは、AVRというマイクロコンピュータと入出力ポートを備えた基盤で、制御にArduino言語というCに似た言語を利用します。
※基盤と言語を合わせてArduinoと呼ぶこともあるようです

制御するためのプログラムを**スケッチ**と

元記事を表示

Object#clone() メソッドからスローされる CloneNotSupportedException はどのようにハンドリングするべきか

(この記事は [地平線に行く](https://yujisoftware.hatenablog.com/entry/CloneNotSupportedException) とのマルチポストです)

Java の `Object#clone()` メソッドは ` throws CloneNotSupportedException` が宣言されています。

“`java

protected native Object clone() throws CloneNotSupportedException;
“`

しかし、**クラスが `Cloneable` インタフェースを実装していれば `CloneNotSupportedException` はスローされません。**
それにもかかわらず `CloneNotSupportedException` はキャッチ例外のため[^CloneNotSupportedException]、スローするかキャッチする必要があります。

[^CloneNotSupportedException]: 設計ミスだと思います。

“`java

元記事を表示

授業で習ったJavaの復習をつらつらと part3

# はじめに
part1, 2を読んでから見よう。須く。
今回からオブジェクト指向、クラス等分かりづらい部分を触れるので**気合い入れて行きましょう**

# ファイルを分ける

Javaではオブジェクト指向型を採用しており、初心者が理解するときの壁になっている。概要から申し上げると、「この世のモノ全部オブジェクト(物体)でしょ?」といった考え方である。具体例を出すと、**「食べ物」は抽象的な概念でモノとしてはいっぱい種類がある**が、**「カレーライス」は一般的に固定のモノ**として存在している。これらを「オブジェクト」と呼んでいるにすぎないのだ。

## じゃあどうやって書くんじゃ

オブジェクト指向を記述する上で、まずJavaで複数のファイルを扱う方法を記述する。これは**ファイルごとに**どんなものを記述しているか大まかに分けたいからだ。
以下はキーボード(標準入力)で読み取った数字を計算させるプログラムで、ファイルを分けて計算処理だけを別ファイルに保存している。

“`java/Main.java
//大まかな処理を記述しているファイル
import java.io.*;

元記事を表示

dokojavaで「大石泉すき」を出力する

#はじめに

この記事は[「大石泉すき」 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ohishi-izumi-suki)への参加記事です。
今回はプログラミング経験が未経験のP(プロデューサー)でも、プログラミングが気軽に体験できるdokojavaを使用して「大石泉すき」を出力する方法をご紹介します。
筆者自身、開発経験が少ないので、間違った記述がございましたら、ご指摘お願い致します。

#dokojavaとは

[「dokojava」](https://dokojava.jp/sources/Main.java)は、Java言語で記述したコードをブラウザ上で実行できる開発環境です。

#使い方

##コード
コードを記述したら、画面右下端の「≫」ボタンをクリックします。

コード.PNGもしこの世にDIコンテナがなかったら。

この記事は[ただの集団 Advent Calendar 2019](https://adventar.org/calendars/4054)の9日目の記事です。

ネット上に非常に多くの記事があるので、DIコンテナの話はほとんどしません。(~~釣りタイトル~~)

この記事では、DIコンテナの目的である、

#### オブジェクトの生成と利用の分離
#### 制御の反転

の話をしますmm

もしこの世にDIコンテナが存在していなくて、DIコンテナが行なっていることを手動でしなければいけない場合、どのような実装が考えられるのか、実際にコードを書いてみます。

## 前提知識
### DIコンテナとは

アプリケーションにDI(Dependency Injection: 依存性注入)機能を提供するフレームワーク。

詳しくは、以下の記事にまとめられているので参照してください。

[DIコンテナとは](http://si.comp.ae.keio.ac.jp/web_app_dev_material/app/di_container/)
[DI・DIコンテナ、ちゃんと理解出来てる・・? –

元記事を表示

C#でJavaのenumを再現する

この記事は [StudioZ Tech Advent Calendar 2019](https://qiita.com/advent-calendar/2019/studioz) の11日目の記事です。

# はじめに
5年ぐらい前からUnityを使うようになり、JavaからC#に転向しました。
似たところの多い言語なのでほとんど違和感なく使うことができたのですが、唯一困ったのがenumの仕様。
そこでJavaのenumをC#で再現できないか考えてみました。

# Javaのenumの特性と実装方法
– 列挙子は列挙型のインスタンスを持つ
– 普通にクラスを使えば満たせます
– 外部からインスタンスの生成ができない
– コンストラクタをprivateにすることで対応可能です
– 列挙型.列挙子でアクセスできる
– 列挙子のインスタンスをstaticフィールドで管理すればアクセス可能になります
– 同名の列挙子は定義できない
– 同名のフィールドは定義できないので、staticフィールドで管理する時点で満たされます

#
ここまでの条件をコードにするとこん

元記事を表示

OTHERカテゴリの最新記事