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

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

try-with-resourseが便利

##リソースを自動で閉じる
ファイル開いて、try-catchして、閉じるみたいな
よくやると思うんですけれど
finallyとか使おうとすると

“`長い.java
// try
// ファイルを開く

// catch
// 例外処理

// finally
// ファイルを閉じる

public static void main(String[] args) {

String filePath = “C:\\Windows\\System32”;
BufferedReader bufferedReader = null;

try {
// ファイルを開く
File file = new File(filePath);

// 読み込み
FileReader fileReader = new FileReader(file);
bufferedReader = new BufferedReader(fileReader);

// 出力
String data;
whil

元記事を表示

Google Cloud Firestore で IllegalStateException: Firestore client has already been closed が発生する

## 概要

– Firestore オブジェクトの close メソッドを呼び出した後で、 FirestoreOptions の getService メソッドで取得した Firestore オブジェクトを使用すると「java.lang.IllegalStateException: Firestore client has already been closed」 が発生する
– 今回の環境: Java 11 + Cloud Firestore API Client Library for Java 1.31.0

## エラーメッセージ例

“`
java.lang.IllegalStateException: Firestore client has already been closed
at com.google.common.base.Preconditions.checkState(Preconditions.java:511)
at com.google.cloud.firestore.FirestoreImpl.streamRequest(Firestor

元記事を表示

JavaでRocksDBを使用してみる

# RockDBとは
Key-Valueのデータ形式(バイト配列)を保持するデータベース。
C++で作られており、JavaからもJNIで使用できる。
ただし、JavaのAPIはC++のAPIに追いついていないとのこと。

Wiki
https://ja.wikipedia.org/wiki/RocksDB

# 使い方
以下に簡単な使用方法を記載します。
詳細は公式のドキュメントを参照してください。

https://github.com/facebook/rocksdb/wiki/RocksJava-Basics

## Maven
以下のライブラリを使用します。
RocksDbのみを使用する場合、rocksdbjniのみでOK。
シリアライズ、デシリアライズのためにkryoを追加しています。

“`xml

org.rocksdb
rocksdbjni
6.0.1

元記事を表示

Mavenで導入したKotlinのInterfaceに実装した関数を、Java8からデフォルト実装として利用する方法

# 概要
KotlinのI/Fにはデフォルト実装を定義できますが、Java側からそのデフォルト実装を利用するにはあらかじめ設定が必要です。
今回はその設定方法を書き記します。

# 前提
– Maven
– Kotlin 1.35
– Java 1.8

# 設定方法
### ①Kotlinのプラグインの設定
pom.xmlのkotlinをcompileさせることを定義している箇所の引数に、`-Xjvm-default=compatibility` を追加
例:

“`xml:pom.xml org.jetbrains.kotlin
kotlin-maven-plugin
${kotlin.version}


compile
compile

元記事を表示

【Java】条件文の個人的まとめ(基礎)

# 【Java】条件文の個人的まとめ(基礎)
エンジニアの t-77 です。
個人的にJavaの勉強で大事だなと思ったことをまとめました。
今回は、条件文についてです。

## ① if文
– if文は、条件がtrueだった場合に、そのブロック内の文を処理する。
– elseを使うことで、設定した条件以外がtrueとして判定され、そのブロック内の文を処理する。
– else ifを使うことで、複数の条件を設定可能。

“`sample.java
// numberの値によって、出力される言葉が異なる。
// number = 10 の場合、処理が実行される。
if (number = 10) {
System.out.println(“Wayne”);
// number = 11 の場合、処理が実行される。
} else if (number = 11) {
System.out.println(“Ryan”);
// numberが上記以外の場合、処理が実行される。
} else {
System.out.println(“other”);
}
“`
上記の例文の

元記事を表示

Spring フラッシュスコープを利用したリダイレクトと単体テスト

あるエンドポイントから別のエンドポイントにリダイレクトさせる際に、フラッシュスコープを利用するとリダイレクト先へパラメータを引き継がせることができる。
# コントローラ
以下のコントローラで`/from`にGETでアクセスした際に、`/to`へリダイレクトさせる。
リダイレクト元の処理で、`bookName`と`buyerList`をフラッシュスコープに突っ込んで、リダイレクト先へ引き継がせる。

“`java
package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import java.util.Arrays;
import jav

元記事を表示

Androidで文字を点滅するメソッドができてうれしい

 こんにちはヨースケです。文字列の一致に”==”を使っていました(笑)。equalsですね!

### 初めて作ったアプリで実装
 この文字を点滅させるメソッドは、初めてアプリを公開した時に実装したものになります。[計算問題付き電卓](https://play.google.com/store/apps/details?id=first.myapp.mycalc)←このアプリは名前の通り電卓に計算問題を出す機能を付けたアプリとなっています。計算問題がスタートするとタイマーをスタートさせ、全10問クリアするとタイマーがストップしそのタイムで点滅するようにしました。また、答え終わると過去のクリアタイムを表示するようにしています。

### ソースコード
 あんまり長ったらしくなってもよくないので稚拙なコードではありますが自分自身の備忘録として貼っておきます。

“`java:Quest.java
public class Quest extends AppCompatActivity {
private final Handler handler = new Handler();
//タ

元記事を表示

Cloud Firestore を Java から使う際のドキュメントまとめ

## Firestore 全般

– [Cloud Firestore  \|  Google Cloud](https://cloud.google.com/firestore/)
– [Cloud Firestore documentation  \|  Cloud Firestore  \|  Google Cloud](https://cloud.google.com/firestore/docs/)
– [Cloud Firestore  \|  Firebase](https://firebase.google.com/docs/firestore/)

## 料金

– [料金  \|  Cloud Firestore  \|  Google Cloud](https://cloud.google.com/firestore/pricing?hl=ja)
– [Firebase Pricing  \|  Firebase](https://firebase.google.com/pricing/?hl=ja)
– [使用量と制限  \|  Firebase](https:

元記事を表示

再帰下降構文解析法による数式の構文解析器の実装(Java)

職場のネット寸断が激しかったので久しぶりのネット活動です
タイトルは今のQiitaではあまり受けが良くなさそうな硬そうな命名にしてみました

要件で求められるパフォーマンスの関係で、再帰下降構文解析法で四則計算する解析器を作成しました
誰かの参考になるかもしれないので置いておきます

# 要件
バッチアプリで数式が文字列で取得されるので、それを計算して結果を返却したかったらしいのですが、その数が膨大でした
元々は、JavaからJavaScriptを呼び出して数式をそのまま渡して計算してもらうつもりだったそうなのですが、対象の式の数が何万何十万単位のため1日で終了しなかったようです

しかもこれからもどんどん増えるそうなのです!

当然次のジョブもあるので、その開始時間までに処理が終わるようにしなければなりません

そこで僕に何とかしてほしいと話がまわってきました
最初に話を聞いたときは、外部プログラム呼び出しでしかもJavaScriptで高速な計算処理ができるわけないがな、と思いましたが

ようは、高速な四則計算が可能な解析器を作成すればよいわけです
除算時の丸め誤差も制御したいらし

元記事を表示

Java11インストール後にEclipseが起動しなくなる現象

# はじめに

職場でJava11をインストールしたところ、Eclipseが起動しなくなりました。
当初は原因が全く分からずに苦戦したので、記録として記事を書くことにしました。

# 状況

## 当初の状態

以下のように古いJavaであったため、空いた時間でJavaのバージョンを上げることにしました。
なお、Eclipseは[Pleiades](https://mergedoc.osdn.jp/)の日本語化版を使っています。

* OS:Windows 10 Pro
* Java:Oracle Java 8
* Eclipse:Eclipse 4.6(Neon)

## Javaのバージョンアップ後の状態

無償で使えて簡単にインストールできる「Amazon Corretto」をインストールしました。

* OS:Windows 10 Pro
* Java:[Amazon Corretto 11](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-11-ug/downloads-list.html)
* Eclip

元記事を表示

Javaプログラミング (クラスとインスタンス、メインメソッド)

#メインメソッド
Javaは必ずクラスで構成されます。クラスのなかで処理はメソッドに書かれます。メソッドのなかで、おおもとの操作や処理はメインメソッドというメソッドに書かれます。
##メインメソッドの書き方
メインメソッドは次のように書きます。クラス名は命名ルール通りにTestクラスとしましょう。

“`java
public class Test(){
public void main(String[] args){
/*
*メインメソッドの処理の中身
*おおもとの操作はここに書かれる。
*/
}
}
“`

ここで

“`java
public static void main(String[] args)
“`
という書き方は覚えてください。
ちなみに、publicとstaticの間のstaticはstatic句といい、メソッドや変数に付けられます。詳しい意味はここでは触れません。

意味があってこのようなルールになったらしいのですが、そこまで追求しなくてもいいと思います。
ただ、普通のメソッドの書き方になっていることは理解してください。

##クラスを使う
では、

元記事を表示

ページ番号のロジックと参考コード(java)

■目次
1、初めに
2、ページ番号ロジック
3、コード例

■初めに
検索サイトを作った時にページ番号の表示ロジックに手間取ったので載せておこうと
思いました。参考にしていただけたら幸いです。
(一例なので改善点・よりよいコードがあれば教えてください)

■べーじ番号のロジック

ページが1の時は5までの数字を出し、間に「・・・」を表示させ最後の番号を表示させる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521889/8f469861-4dbf-67ff-2cfa-0f4e25e63cd1.png)

ページ番号が5以上の時に始めのページ・前2つのページ番号・後ろ2つ・最後の番号を表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521889/08bb1c01-4a1d-6504-fcc0-7a3d0f5eed46.png)

ページが(最後のページ ー 3)の場合は初めのページ・

元記事を表示

GroovyのDefaultGroovyMethodsとJavaのStream APIの相互変換まとめ

仕事でGroovyのDefaultGroovyMethodsをJavaのStream APIを使った形に書き直すという作業を行ったので、備忘録も兼ねてまとめます。

サンプルコードの動作はそれぞれ以下のバージョンで確認しています。
Java: 11
Groovy: 2.5.8

#DefaultGroovyMethod ⇔ Stream API
##each ⇔ forEach
“`groovy:Groovy
def list = [“Java”, “Groovy”, “Scala”]
list.each { println it }

—結果—
Java
Groovy
Scala
“`
“`java:Java
List list = List.of(“Java”, “Groovy”, “Scala”);
list.forEach(System.out::println);

—結果—
Java
Groovy
Scala
“`
##collect ⇔ map + collect
“`groovy:Groovy
def lowerCases =

元記事を表示

Caused by: java.lang.NoSuchMethodError: ‘boolean javax.servlet.ServletContext.setInitParameter(java.lang.String, java.lang.String)’

“`:log
Caused by: java.lang.NoSuchMethodError: ‘boolean javax.servlet.ServletContext.setInitParameter(java.lang.String, java.lang.String)’
“`

# Cause

The error indicates multiple version servlet-api jar in class path.

* `javax.servlet:servlet-api` (< 3.0) * `javax.servlet:javax.servlet-api` (>= 3.0)

# Resolution

Remove old servlet-api dependency.
Basically, old class depends on old servlet api will work with new api.

“`gradle:build.gradle
configurations.all {
exclude module: “servle

元記事を表示

Selenium × Java

# SeleniumをJavaで使ってみた

## Seleniumとは
※以下抜粋
Seleniumは、Webアプリケーションをテストするためのポータブルフレームワークです。
Seleniumは、テストスクリプト言語を学ぶ必要なく機能テストを作成するための再生ツールを提供します。

要はwebアプリケーションを自動で実行できたり、HTMLを解析(Webスクレイピング)するためのライブラリ。python、node.js、Java、PHPなど多言語でライブラリが用意されており、簡単に実装が可能。

## 経緯
会社の勤務システムがwebアプリケーションで動いており、PC起動時にブラウザ起動から提出まで自動化したいというのが最終目標。本記事はSelenium導入、「Chrome起動→Google検索を開く」までとする。

## アーキテクト
| ||
|:-:|:-:|
|言語 |Java( ver.11 )|
|build |Maven |
|ブラウザ |Google Chrome |
|IDE |IntelliJ |

## 手順
前提
java x M

元記事を表示

JJUG CCC 2019 Fall 資料まとめました

タイトルのとおり昨日開催された「JJUG CCC 2019 Fall」の資料をまとめました。

資料が見つからなかった場合のリンクは、部屋番号のハッシュタグといった関連する内容のツイッターになっています。

ーーー

[タイムテーブル](https://ccc2019fall.java-users.jp/timetable.html)

10:00〜10:45

A+B
[試して学ぼう、Java EE アプリケーションをOpenShift(Minishift)でデプロイ!](https://www.slideshare.net/osonoi1/javaminishift20191123)

C+D
[Head toward Java 13 and Java 14](https://www.slideshare.net/YujiKubota/head-toward-java-13-and-java-14-jjug)

E+F
[All people are VIP~Disney哲学から考えるDiversity](https://docs.google.com/presentation/d

元記事を表示

SpringBoot×OpenAPI入門 〜Generation gapパターンで作るOpenAPI〜

### 背景

Javaのコミュニティイベント「JJUG CCC 2019 Fall」に参加。
そこで聞いた「Swagger ではない OpenAPI Specification 3.0 による API サーバー開発」の登壇内容に触発されて超簡単なOpenAPIを作った話。(浅いです)

### 今回のゴール

SpringBootを使ってOpenAPIを書く

### OpenAPIを使った開発フロー(ざっくり)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230829/fe324a04-eeea-b7f5-44fe-7157e2b4c0a9.png)

ルール:**Generation gapパターン** → 自動生成したクラスファイルは編集しない。

#### 1. API定義ファイルを用意

OAS(OpenAPISpecification)にあるサンプルを使用

https://github.com/OAI/OpenAPI-Specification/blob/master

元記事を表示

Gradle5 で Lombok が使えない

# macOS x IDEA x Gradle5 x Spring-boot2 で Lombok を使おうとして、コンパイルはできるがビルドができない。

アノテーションの設定や Lombok Plugin の設定は済んでいて、@Slf4 を記述し、log.debug を記載してエディタ上でエラーは発生しないけど、ビルドすると以下エラーが発生する。

“`
/src/to/path/TestController.java:14: エラー: シンボルを見つけられません
log.info(“start”);
^
シンボル: 変数 log
場所: クラス TestController
“`

以下の設定を build.gradle に追加したら解決

“`
compileOnly group: ‘org.projectlombok’, name: ‘lombok’, version: “${lombokVersion}”
annotationProcessor group: ‘org.projectlombok’, name: ‘lombok

元記事を表示

Javaの入門書を一通り読んだので何か作ってみる

#javaの入門書を一通り読んだので...
プログラミングは作ってなんぼ!!!
ということで何か簡単なゲームでも作ろうかと思い考えたのはずばり**『じゃんけん!!!』**(しょぼい)
これは自分のプログラミングロード第一歩ということでゲームの原点といってもいい**『じゃんけん』**!!!でちょうどいいじゃんと思い即座にコードを書いてみました!!!!!

“`
class Janken{
public static void main(String[] args){
janken();
}
//メイン

public static void janken(){
int loop = 0;
//あいこの場合loop==0、勝利か負けの場合loop=1,
//※loop変数であいこの場合でもじゃんけんを繰り返す

while(loop==0){
String hand[] = {“グー”,”チョキ”,”パー”};
//出し手変数
System.out.println(“最初はグー!じゃんけん・・・”);
System.o

元記事を表示

Javaにおけるスレッド実装方法の比較とラムダ式的記述方法

## はじめに
 急遽、Javaでマルチスレッドプログラムを作れという職場からの
 無茶苦茶な要望に答えるべく速攻で勉強したことをまとめておく。
 ※ Javaの経験日数はまだ3日程度なのでミスしてたらご指摘ください。

## 結論:とりあえずサクッと起動したい場合
サブスレッド起動までのパスが少ない&サブスレッドをインスタンスとして保持しないなら、ラムダ式を組み合わせて

“`java:ThreadStartTemplate.java
new Thread( () -> {サブスレッドで実行したいメソッド or 処理} ).start()
“`

でよさそう。便利っすねぇー。
※僕の中では、ラムダ式はローカルな無名クラスと理解しています。

## 実行環境
自前でEclipseのインストールとかは後回しにしてとりあえず、文法を確かめるために[paiza.io](https://paiza.io/ja/projects/new)を使いました。

## サブスレッドの実装方法
以下の2パターンでスレッドを実装できるみたい。
 1. Rnnableインタフェースを使用する。
 2. T

元記事を表示

OTHERカテゴリの最新記事