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

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

Javaのテストにおけるモダンなベストプラクティス

本記事は[Modern Best Practices for Testing in Java](https://phauer.com/2019/modern-best-practices-testing-java/) の日本語訳です。元記事の著者から許可を得て翻訳、公開しています。
翻訳は不慣れなので変なところもあると思いますが、ご容赦ください。


メンテナンスしやすくて読みやすいテストコードは良いテストカバレッジを確立するために重要で、それにより何かを壊すことを恐れずに新機能の実装やリファクタリングが可能になります。この記事には、私がJavaでユニットテストや統合テストを長年に渡って書いて得られた多くのベストプラクティスが含まれています。それにはJUnit5やAssertJ、Testcontainers、Kotlinといったモダンな技術も含みます。中には当たり前と思われるようなこともあるかもしれませんし、あなたがソフトウェア開発やテストについての本で読んだことと相容れないこともあるかもしれません。

# TL;DR
* ヘルパー関数やパラメータ化テスト、AssertJの強力な

元記事を表示

Forge Modding 1.12.2 Part1 -Baseクラス

#Forge Modding Part1
(Forge Projectのセットアップの説明は他を当たってください)

##Object
Objectパッケージを作り、その中に

・ItemBase.java
・BlockBase.java

を作成。
その中に、Implmentsパッケージを作成。
そこに、
・IHasModel.javaを作成。

### ItemBase
“`Java
String name;
public BlockBase(String name, Material material, CreativeTabs tabs,float blockHardness) {
super(material);
setTranslationKey(name);
setRegistryName(Refarence.MOD_ID,name);
setCreativeTab(tabs);
setHardness(blockHardness);
setResistance(1.

元記事を表示

upperBoundとlowerBoundをライブラリ化する(java)

# はじめに
 この記事では、**C++のupper_boundとlower_boundと同等の動作**をするライブラリとして作成した**javaのメソッド**を紹介します。主な対象読者は、javaの競技プログラマーです。

# 目的
 javaで競技プログラミングをする際に、**ライブラリとして利用できるupper_boundとlower_boundのメソッドを紹介すること**です。**記事末尾の貼り付け用ソースを、コピペして、使い方を参考にすればすぐに利用できます。**

# ライブラリ作成に至った背景
 競技プログラミングで多用されるupper_boundとlower_boundですが、javaの標準ライブラリにはこのメソッドがないため、毎回自力で二分探索を書いたりして苦労していました。次に紹介する方法で、upper_boundとlower_boundを短いコードで実現できることを知ったのですが、これも短いコードながら複雑で面倒でした。
 そこで、面倒な実装を毎回しないで済むように、ライブラリ化することにしました。

#upper_boundとlower_boundの実現方法
 

元記事を表示

Ruby と Perl と Java で解く AtCoder ABC 128 C

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。
# 今回のお題
*[AtCoder Beginner Contest 128 C – Switches](https://atcoder.jp/contests/abc128/tasks/abc128_c)*
Difficulty: 807

今回のテーマは、ビット演算
# Ruby
“`ruby.rb
n, m = gets.split.map(&:to_i)
k = []
1.upto(m) do |i|
s = “0” * n
h = gets.split.map(&:to_i)
h.shift
h.each do |j|
s[j – 1] = “1”
end
k[i] = s.to_i(2)
end
p = get

元記事を表示

JavaVMにおいてのboolean型のバイトサイズ

#言いたいこと
Javaにおいて、**boolean型変数は1バイトではない!(結論)**

…かもしれない。(ボソッ
では、確認していきます。

結論だけよこせ!というヒトは、
「終わりに」まで読み飛ばしちゃってください。
#環境
– JDK
– OpenJDK 14 で確認しています。
– バイナリエディタ

#ローカル変数としてのbooleanのサイズ
次のコードを書きます:

“`java:Sandbox.java
public class Sandbox{
public static void main(String[] args){
boolean b = true;
//StackMapTable属性の為
if(b){
b=true;
}
}
}
“`
これをいつも通りコンパイルし、出力された「.class」ファイルの中身を見ます。

“`terminal
> javac Sandbox.java
> javap -v Sandbox

(前略)

p

元記事を表示

Twitter4Jで自動RT・自動ツイートするbotを作った覚え書き

こんにちは、[しゅがーはぁと応援bot](https://twitter.com/sugarheart26bot)の技術担当の人です。
“しゅがーはぁと”というのはアイドルマスターシンデレラガールズに登場するキャラクター、”佐藤心”の愛称です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621290/e212a22b-6ca4-861e-4e86-2e0553bf84a3.png)

しゅがーはぁと応援botは、その佐藤心を応援するための非公式botです。

Twitter4Jで自動RTと自動ツイートをするプログラムを組んだので、他のPの参考になればor後の自分が作るときの参考にすべく、記事を投稿します。

#作るもの

botを運営している知人から、
「『#佐藤心』『しゅがは』のワードが入ったツイートを自動でRTしてほしい」
「8:10ちょうどに画像ツイートしてほしい」
と頼まれました。

前者は[RTbot](https://rtbot.ne.je/)で、後者は[Botbird

元記事を表示

VSCodeでJavaプログラミングを始めてみるメモ(2020-04版)

VSCode で Java プログラミングを始めるときの、最初の一歩についてメモです。
2020-04 時点で、以下のバージョンで試しています。

– Windows 10 Pro 日本語版
– AdoptOpenJDK 11 (HostSpot版)
– VSCode 1.44.2

## VSCode のインストール

まず VSCode をインストールします。

– https://code.visualstudio.com/

## JDKのインストール

続いてOpenJDK (Java Development Kit) をインストールします。
2020-04時点では Oracle / OpenJDK公式 / AdoptOpenJDK / RedHat / Azul / AWS / BellSoft など複数ベンダーがそれぞれバイナリパッケージを提供しています。
いろいろな意見があると思いますが、自分の場合は AdoptOpenJDK の LTSバージョン を使うのが無難かな~と思います。
AdoptOpenJDKのサイトから 11 (LTS) をダウンロードしてインストールし

元記事を表示

1ヶ月SpringBootを触ってまだ理解できていないところ(+備忘録)

#はじめに
Spring Bootを使ったアプリケーションの実装を行ってきて1ヶ月が経った。
しかしまだ良くわかってない部分が沢山あるので勉強したところをここにノート変わりとしてまとめていく:v:

#DI(依存性の注入)とは?
IoC(Inversion of Cotnrol = 制御の反転)の一種。
IoCの中には`ServiceLocator`というのもあるらしいがそれは[こちら](https://www.nuits.jp/entry/servicelocator-vs-dependencyinjection)を参照して欲しい。

DIとは、Dependency Injectionの略で、Springの全ての土台となっている。
DIを簡単に説明するならば、***インスタンスの管理***である。

##インスタンスの管理とは…?
– DIコンテナの中で、クラスをnewしてインスタンスを生成する。
– DIの中で毎回newしたインスタンスをアプリケーションに渡すのか、一度newしたインスタンスをアプリケーションに渡すのかを管理する。
– サーブレットのリクエストスコープやセッショ

元記事を表示

甥っ子のために簡単なスマホゲームを作ってみる

#はじめに
甥っ子が4歳になりスマホの画面を適当にポチポチ触って遊んでるので、簡単で4歳児にもわかるゲームを作ってあげたいなと思って、勉強を兼ねて実際に作ってみることに。
とはいえ、androidアプリなんて作ったことないし、ましてやゲームなんて…

調べてみたらCode for Funさん([【作って学べる】Android Studio ゲームアプリ開発入門](https://codeforfun.jp/android-studio-catch-the-ball-intro/))が大変わかりやすく環境構築から簡単なゲームを作る手順を解説していたので、これを見ながら勉強して作つくりました。

##出来たもの
出来たものは、ほぼCode for Funさんのと同じ玉取りゲームですが、少し改良を加え、スコアによって玉の動く速度を変えて、ある一定のスコアに達するとタップ一回ごとに玉の速度が若干早くなるという鬼畜仕様になっています。
追加の隠し要素としてランダムで流れてくる☆を取ると、15秒間ゲームオーバーになる黒いモヤットボール?の出現を止め、逆に高得点の赤玉の出現頻度が増えるというボーナス

元記事を表示

Androidで電卓アプリ作ってみた

# 概要
シンプルな電卓アプリです。
Androidのお勉強用に作りました。

Android Studio 3.6.2
TableLayout
![caluculation.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566570/f84b198c-cb91-b52c-3ca6-80b0526cab06.png)

# 苦労したこと
TableLayoutで行をまたいだボタンを作るところ。(+ボタン)

バグ修正。
・小数点を連打できないようにする
・+-×÷=を連打できないようにする
・=ボタンクリック後の挙動いろいろ。

## TableLayoutで行をまたいだボタンを作る方法
Table rowの中にLinearLayoutを入れ子にします。

“`activity_main.xml

元記事を表示

Spring-Batchをストレスなく使う

# Spring-Batchをストレスなく使う

– TLDR;
– spring-batchにはジョブ状態を管理する機能があるが、邪魔なので`application.yml`で無効にできる
– その他の関連する設定についても書く

## application.ymlの設定

– banner-mode: off
– spring-bootの起動時のバナー表示をしない(off,console,logの設定ができる)
– initilization-schema: never
– spring-batch起動時にバッチジョブ用テーブルを初期化するかどうか

“`yaml
spring:
main:
banner-mode: off
batch:
initilization-schema: never
“`

## アノテーション設定
– spring-batchはジョブの状態を保存しようとするが、特にそういった機能はいらない
– ここを参考にしてデータソース自体を作らせないようにする
– [Spring BatchでIn-Memory

元記事を表示

PowerMockでsuperメソッド呼び出しをモックする方法

#はじめに

MockitoとPowermockを利用したJUnitにおいて、どうしても`super`を利用した親クラスの処理をモックする必要があって結構悩んだので、メモしておきます。調べると`PowerMockito.suppress()`を使えってのは結構出てくるのですが、`suppress()`だとスキップ処理されるだけであり、きちんとこちらの想定するモックオブジェクトを返してくれいとうまくJUnitの後続処理を実行できない状態でした。

#テスト対象クラス
サンプルのコードを以下に記載します。DTOクラスは省略します。

親クラス

“`
public class Parent {

public OutputDto execute (InputDto input) {
System.out.println(“Parent#execute()”);
OutputDto out = new OutputDto();
out.setText(input.getText());
return out;
}
}
“`
子クラス

“`
public class

元記事を表示

Ruby と Perl と Java で解く AtCoder ABC 136 D

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。
# 今回のお題
*[AtCoder Beginner Contest 136 D – Gathering Children](https://atcoder.jp/contests/abc136/tasks/abc136_d)*
Difficulty: 792
# Ruby
“`ruby.rb
s = gets.chomp
f, c = 0, 0
p = []
0.upto(s.size – 1) do |i|
if s[i] == ‘R’ && f == 1
f = 0
p.push(c)
c = 0
elsif s[i] == ‘L’ && f == 0
f = 1
p.push(c)
c =

元記事を表示

美大生のためのプログラミング入門:キャンバスを作る

参考:Qiita では印刷がうまくできません。プリントしたい人や PDF 化したい人は [http://gurakura.sakura.ne.jp/hellomondrian/makecanvas/](http://gurakura.sakura.ne.jp/hellomondrian/makecanvas/) を見て下さい(同じ内容です)。

# はじめに
プログラムで絵を描くといっても、描く場所がないと始まりません。まずはキャンバス作りから始めていきます。

# 大きさの指定
Processing では、何もプログラムを書かずに、そのまま実行ボタンを押しても小さなウィンドウが表示されます。このウィンドウこそが、プログラムでアニメーションなどが描かれる場所、キャンバスです。

キャンバス(ウィンドウ)のサイズは size という関数で設定します。いきなり「関数」と言われても、何?という疑問もあるかと思いますが、それは順次説明していくとして、まずは以下のプログラム(コードとも言う)を入力し、実行してみて下さい:

“`Java
size(400,300);
“`

何も書かないで実

元記事を表示

Tomcatの起動時にClassNotFoundExceptionとなった時の対応方法

– 環境
– CentOS Linux release 7.6.1810 (Core)
– Eclipse 2019-03 (4.11.0)
– Java1.6.0_41
– Apache Maven 3.2.5

# 事象 : EclipseでTomcatを起動したら怒られた

“`bash:[Consol]タブのログ
情報: Initializing Spring root WebApplicationContext
2020-04-17 10:32:34.216 ERROR Jotm.:144 – Instanciation of TransactionFactory failed
java.rmi.StubNotFoundException: Stub class not found: org.objectweb.jotm.TransactionFactoryImpl_Stub; nested exception is:
java.lang.ClassNo

元記事を表示

ysoserial CommonsCollections2 反序列化分析

## 复现
JDK8u221,生成反序列化文件

“`java
java -jar ysoserial-master-30099844c6-1.jar CommonsCollections2 calc > test.ser
“`

构造反序列化点

“`java
package com.xxe.run;

import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class CommonsCollections2 {
public static void main(String[] args) {
readObject();
}

public static void readObject() {
FileInputStream fis = null;
try {
fis = new FileInputStream(“web/test.ser”);
ObjectInputS

元記事を表示

JMXでログイン情報を管理してみた

「踊ってみた」みたいなタイトルですが、真面目な記事です。

ちょっと前に自分が参加しているプロジェクトでJMXについて調査してみたんですが、これ使えば簡単な設定なら設定画面作らなくてもいいじゃないかと思ったんです。
お客さんには勧めづらいと思うけど、社内の自社製品とかなら設定画面作る工数を削減できるんじゃないかと思って簡単なログイン情報管理できるアプリを作って使用感などを見てみました。

## 環境

今回は簡易機能なのでDBは使用してないです。
ログインするだけの簡単なWebアプリケーションをSpringを使用して作成しました。
使用したライブラリなんかは以下の通りです。

– OpenJDK 13.0.2
– Sprinig Boot 2.2.5
– Thymeleaf 3.0.11
– Apache Commons CLI 1.4
– Tomcat 9.0.31

## ログイン管理の仕様

ログイン管理の仕様について簡単に記載してみます。

– ログインユーザ一覧が閲覧できる。
– 最大ログイン人数が設定できる。
– IDロックが実施できる。

ログイン管理機能についてはこの

元記事を表示

JavaのEnum活用例

Javaを以前仕事で使っていた時に、分かりにくい処理があったのでそれをリファクタリングしたお話です。

# リファクタリング前

リファクタリング前はこのようになってました。

“`Java

private void doProcess() {
A a = initial();
if (!chkfnc1(a)) {
throw new XXXException(x1);
}

if (!chkfnc2(a)) {
throw new XXXException(x2);
}

if (!chkfnc3(a)) {
throw new XXXException(x3);
}

execute(a); //チェック後の実行処理

}

private boolean chkfnc1(a) {}
private boolean chkfnc2(

元記事を表示

Javaの知識まとめ

#ファイル作成・書き込み・読み込み

//ファイル作成
File file = new File(“ファイルパス”);
file.createNewFile();

//ファイル書き込み
FileWriter fw = new FileWriter(file);
fw.write(“書き込み1\r\n”);
fw.write(“書き込み2\r\n”);

//ファイル読み込み
//(上記のファイル書き込みのすぐ後にこれを行ったら1回目のループでc == -1になった)
int c;
FileReader fw = new FIleReader(file);
while( (c = fw.read()) != -1) {
System.out.println( (char)c);
}

//ファイルクローズ
fw.close();

#サーブレットでのフォワード
RequestDispatcher dis = request.getRequestDispatcher(“dispatch.jsp”);
dis.forward(request, response);

元記事を表示

thymeleaf 〇文字目~ 省略表示方法

#thymeleafでDBから取得した文字列を指定文字数まで表示

今回業務で、ある範囲内に指定文字数を表示し、それ以降は「…」って表示することがあったので、
メモとして記載します。
まだまだ未熟ですので、間違っている箇所等あれば、指摘して頂けると嬉しいです。

##・文字列の長さ
“`Java
“${#strings.length(hoge.str)}” //hoge.strの文字列を取得できる。
“`

##・実際の使い方
“`Java
//10文字以上の場合、9文字目まで表示させて、それ以降は「…」と表示

//それ以外は普通に表示

“`

###・その他
#### isEmpty
“`Java

元記事を表示

OTHERカテゴリの最新記事