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

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

【Kotlin】リフレクションで、kotlin-reflect無しでデフォルト引数を用いて関数を呼び出す

# TL;DR
– `Kotlin`のデフォルト引数付き関数は`Java`のリフレクションからも呼び出せる = `kotlin-reflect`無しでも呼び出せる
– ただし、`kotlin-reflect`無しで呼び出しのための情報を集めることは困難が伴うため、依然として`kotlin-reflect`の削除は難しい

# 本文
## デフォルト引数付き関数がどうコンパイルされるか
まず、デフォルト引数付き関数がどうコンパイルされるかを見ていきます。
例として、以下のようなデフォルト引数付きコンストラクタを取り上げます。

“`kotlin
data class Clazz(val foo: String = “Hello World.”)
“`

このコンストラクタは以下のようにコンパイルされます。

“`java:デコンパイル結果からコンストラクタ部分の抜粋
public Clazz(@NotNull String foo) {
Intrinsics.checkNotNullParameter(foo, “foo”);
super();

元記事を表示

パッケージとアクセス制御

無名パッケージに属するクラスは、同じ無名パッケージに属するクラスからしかアクセスできない。
例えば、下記の2つのクラスは同じパッケージ(無名パッケージ)に属しているためOfficeクラスからPersonクラスを使う事ができる。

“`java
class Person{}

public class Office{
Person p;
}

“`

しかし、下記のように仕様を変更し明示的にパッケージ宣言したクラスから、無名パッケージに属するクラスにアクセスしようとするとコンパイルエラーになる。

“`java
class Person{}

“`

“`java
package ex4; //明示的にパッケージを宣言する

public class Main{
public static void main(String[] args) {
Office office = new Office();
}
}
“`

元記事を表示

SpringFoxでデフォルトのパラメータを追加

たとえば、contollerには定義しないがアプリケーション固有のheaderを渡す必要があり、それをswagger-uiで表示したい場合、“`Docket#globalRequestParameters“`を使用する。

“`gradle:build.gradle
plugins {
id ‘org.springframework.boot’ version ‘2.4.4’
id ‘io.spring.dependency-management’ version ‘1.0.11.RELEASE’
id ‘java’
}

group = ‘com.example’
version = ‘0.0.1-SNAPSHOT’
sourceCompatibility = ’11’

configurations {
compileOnly {
extendsFrom annotationProcessor
}
}

repositories {
mavenCentral()
}

dependencies {
implementation ‘org.s

元記事を表示

輪読会:第4回 Javaで学び直すオブジェクト指向プログラミング

こんにちは。
株式会社アクシスのヤマウチです!
弊社の福岡オフィスでは、木金の昼休みの時間を利用して輪読会を行っています。
現在は[Software Design 2021年3月号](https://www.fujisan.co.jp/product/1535/b/2076902/)の「Javaで学び直すオブジェクト指向プログラミング」を読んでいます。

今回は第4回の記事になります。
第4回は第1章 オブジェクト指向プログラミングのメリットから第1章の最後まで読みました。

※以下、オブジェクト指向プログラミングをOOPと略します

## オブジェクト指向プログラミングのメリット

ここでは「再利用性」という言葉が出てきました。
そこがこの節の議論ポイントで色々話したので、それについて書いていこうと思います。

まず結論として、再利用性は**汎用性が高い**とニアリーイコールで、汎用性が高いからこそ、再利用が可能となる。というような感じの結論になりました。
個人的な感想としては、「再利用性」ってワードはOOPの中では聞いたことがなかったので、今回、僕らが出した結論である汎用性の方がし

元記事を表示

JUnitのテストで嵌ったパス指定

# はじめに

今回、Javaでの開発中にテストを行うため、テストクラスを作成しました。
そして、`JUnitCore`の実行を行う際にパス指定を行うのですが、記述方法で躓いたのでまとめておこうと思います。

**~注意~**
開発環境や Shell などの違いで予想と異なる結果の場合があるかもしれません。
下記環境を参照.

# 環境
* macOS 11.0.1
* JDK 11.0.10
* JUnit 4.13.2
* vscode 1.54.3

# 前提条件

Javaプロジェクトの構成

Javaプロジェクトの src 直下に移動
注意:上記のプロジェクト構成の場合

“`
cd ~/Workspace/Java/Project/src
“`

# 問題点

下記を実行するとエラーが出力される。

`

元記事を表示

Javaでオセロゲームを作る

Tech academy サイト参考にJava復習したかったので、オセロゲームを作ろうとしました。

Javaでオセロゲームを作成を現役エンジニアが解説【初心者向け】

Board.javaクラスファイルと
Othello.javaの実行ファイル作成。

だが実行するとシンボルを見つけられませんとのエラーが出る。

シンボルエラーもTech Academyサイトで復習した

https://techacademy.jp/magazine/46766#sec2

が、何故Othelloでエラーが出るのか不明という状態

元記事を表示

[api document] JApiDocsを使って、spring bootのapi documentの自動作成

# 概要
[JApiDocs](https://github.com/YeDaxia/JApiDocs)とはアノテーションを書かなくても、apiのドキュメントを自動生成できるライブラリーだそうです。便利かなと思い、使ってみました。
> A magical api documentation generator without annotation for springboot.

# requirement
* Supported JDK:1.8+
* maven・gradle(今回は Gradle 6.8.3を使います)
* spring-boot cli(Spring CLI v2.4.4)

# OS
macOS

# 手順
## spring-boot cliを使い、spring bootのプロジェクトを作成

“`bash
spring init –build=gradle –java-version=1.8 –dependencies=web japidoc
“`

上記のコマンドを実行し終わると下記のようなディレクトリは作成されました。

“`bash
├──

元記事を表示

JSPファイルを作成してlocalhost環境で動かしてみた日記。

自宅の趣味用PCで**JSPファイルを作成してlocalhost環境で動かす**というのをやってみたくなったのでやってみた。
※この記事は私の自分用の日記みたいなものですので、読む価値があるかどうかはアレです。

# Javaをインストール
Javaをインストールした。超簡単に書くと下記のような流れ。

・ネット上から **jdk-15.0.2_windows-x64_bin.exe** を入手してきてインストール
・ユーザー環境変数のPATHに`C:\Program Files\Java\jdk-15.0.2\bin`を追加
・システム環境変数のJAVA_HOMEに`C:\Program Files\Java\jdk-15.0.2`を追加
・念のためコマンドプロンプトで`java -version`して結果を確認

# tomcatをインストール
こちらの解説サイトの通りに作業した感じ。

【はじめての方向け】Apache Tomcatのインストール方法を簡単に!

今回は`C:\apache-tomcat-9.0.44`に置くことにしたので、
tomca

元記事を表示

【Java】Selenium+ChromeDriverで突然「あなたは人間ですか?」と聞かれた時は

# 突然の死
Seleniumで作ったツールで保存したキャプチャ画像みんなCAPTCHA認証(Cloudflare)になってるやろがい!
先週までちゃんと動いてたのに何で急に認証を要求してくんの!?聞いてないわ!
そんな感じで突然それまで動いてたツールが死んでしまったので、その対処法のメモです。

なお、突然の死が発覚したキャプチャ対象はMavenのリポジトリでした。
手動では閲覧のために認証を必要としない普通のサイトです…

動作確認を行ったChrome本体とChromeDriverのバージョンは以下の通りです。

– Google Chrome: 89.0.4389.90(Official Build) (64 bit)
– ChromeDriver – WebDriver for Chrome:89.0.4389.23

# ソース
“`java
ChromeDriverService service = new ChromeDriverService.Builder()
.usingDriverExecutable(new File(“chromedriver.exe

元記事を表示

Java PDFをPDF/A-1A, 2A, 3A, 1B, 2B及び3Bで保存

PDFにはいろいろな家族があります。例えば、PDF/1Aは、PDFの各種オブジェクトの中で、必須とする機能、使用を制限する機能、使用を禁止する機能などを決めています。今回は Spire.PDF for Javaを使ってPDFをPDF/A-1A, 2A, 3A, 1B, 2B及び3Bで保存する方法を紹介します。コードはとても簡単ですから、一緒にみましょう!

下準備

1.E-iceblueの公式サイトからFree Spire.PDF for Java無料版をダウンロードしてください。

f:id:lendor</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Java</div>
<div class='tag-cloud-link'>PDF</div>
<div class='tag-cloud-link'>保存</div>
<div class='tag-cloud-link'>PDFA</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/iceblue/items/00027d36647e2cc20004'>元記事を表示</a></div>
<h3 id= Java PDF添付ファイルの追加

PDF およびそれ以外のタイプのファイルを PDF に添付できます。PDF を別の場所に移動すると、添付ファイルも PDF 文書と一緒に移動します。今回は Spire.PDF for Java を使ってPDFに添付ファイルを追加する方法を紹介します。

下準備

1.E-iceblueの公式サイトからFree Spire.PDF for Java無料版をダウンロードしてください。

f:id:lendoris:20210331103946p:plainJavaのCallableはExceptionがcatchできない?

仕事でCallableスレッドの処理がExceptionを拾えないのでRunnableに替えるという作業があったので本当にExceptionが取れないのか試してみました。

### Callableの実装

“`java
package example;

import java.util.concurrent.Callable;

public class Call1 implements Callable {

// callの中に実際の処理を書く。
public String call(){
String nonNum = “null”;
System.out.println(“init Call1”);
// Exceptionを発生させる
System.out.println(“print call ” + Integer.parseInt(nonNum));
return “Call”;
}
}
“`

### Runnableの実装

“`java
package example;

public cl

[Android]脳死で使っていたcontextを少し掘り下げる

# Contextってよく使うけども…
今まで、ダイアログ等の引数にcontextを要求されると、条件反射でcontextを打ち込んでいましたが、少しだけ掘り下げてみようかなと思います。

前提としてcontextは、奥が深いみたいなので完全な理解は難しそうなので、ここでは、Activityで用いるContextとApplicationContextの違いについて触れてみたいと思います。

# ApplicationContextとActivityContextの違い
ApplicationContextは、文字通りでアプリ間のライフサイクルと関係していてアプリを起動してから、ずっと生き残って欲しいときに使います。
その為、アプリ間で共有されるローカルデータベースのアクセス等で使われますね。

そして、ActivityContextは流れで分かるかもしれませんが、Activityのライフサイクルと関係しています。その為、ActivityがonDestroy()されると、死にます。
Intentの時に使いますね。

ちなみに、thisもよく使われますが、thisはクラス自体を指します。

元記事を表示

jenv環境でmavenコマンドを利用すると.java-versionが無視される

jenvで複数バージョンのJavaを管理していたところ、mavenコマンドがjenvではなくSystemのJavaを参照していたので、jenvを参照するように行った設定のメモ。

# 環境

– OS : macOS 11.2.3
– jenv : 0.5.3
– maven : 3.6.3

# 状況
“`bash
$ mvn -version

Apache Maven 3.6.3 (xxx)
Maven home: XXX
Java version: 15.0.1, vendor: N/A, runtime: XXXX
Default locale: ja_JP, platform encoding: UTF-8
OS name: “xx”, version: “xx”, arch: “xx”, family: “xx”
“`

# 解決方法
“`bash
$ jenv enable-plugin maven
“`

“`bash
$ jenv version

Apache Maven 3.6.3 (xxx)
Maven home: XXX
Java version:

元記事を表示

環境省の花粉情報取得APIを使ってみた

# はじめに

花粉症の方なら皆さんご存知のサイト「[環境省花粉観測システム(愛称:はなこさん)](http://kafun.taiki.go.jp/index.aspx)」が2021年3月29日に[新たなサイト](https://kafun.env.go.jp/)にリニューアルされていました。

よくよく見ると、「[環境省花粉観測システムのAPI](https://kafun.env.go.jp/apiManual)」なるものが公開されていましたので、早速使ってみました。

# APIの概要

実は[APIの説明ページ](https://kafun.env.go.jp/apiManual)は存在するのですが、JSONで取得できることと下記のパラメータ説明以外はあまり詳しい説明がありません。

##パラメータ

|パラメータ名称|URLに入力する名前|必須|値の例|備考|
|:-:|:-:|:-:|:-:|:-:|
|取得開始年月|Start_YM|○|202003|
|取得終了年月|End_YM||202005|指定しない場合は現在の年月|
|都道府県コード|TDFKN_CD|○|0

元記事を表示

Java Tokenintercepterを使用して、Sessionの確認

# TokenInterceptorとは
Controllerの実行前後に処理を追加する

#使用環境
Java
Springboot
SpringToolSweet4

#実装方法
・プロジェクト構造
![スクリーンショット 2021-03-30 16.52.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172696/6f81dd65-0d5e-b4d4-9702-0d6af53286f3.png)

以下ファイルを作成

“`java:TokenInterceptor.java
package com.example.demo;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotatio

元記事を表示

ProcessBuilderクラスの使い方

スッキリわかるJava入門(実践編)を読んでいると、**ProcessBuilderクラス**の使い方がちらっと載っていた。
Javaからコマンドプロンプトやターミナルを呼び出す処理は汎用性が高そうだったので、使い方をまとめるのがここでの目標である。

この文は最後に書いているが、ProcessBuilderクラスをまとめる上で、Processクラス、BufferReaderクラス、InputStreamReaderクラスなどとたくさんの出会いがあった。

# ProcessBuilderとは
ProcessBuilderを一言でまとめると、下記である。
> ProcessBuilderとは、Javaから外部プログラムを実行するために使用するクラス。

[ProcessBuilderの使い方](https://techacademy.jp/magazine/19751)
[ProcessBuilderの公式ドキュメント](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/ProcessBuilder.html)

つまり、こ

元記事を表示

Java学習 基礎編 コンストラクタとは?

Java学習の備忘録になります。
内容は初心者なので基礎的な部分となります。
Javaに興味がある方やJava学習初心者の参考になれば幸いです。

* * *
#### コンストラクタとは?

前回、インスタンスの生成から、インスタンスフィールドの値をセットする方法あたりを行ってきましたが、このインスタンスフィールドが増えると記述も面倒だし、わかりづらかったりします。

そこで登場するのが**コンストラクタ**です。

詳しく説明すると、クラスにはコンストラクタというものがあり、**newを使ってインスタンスを生成した後に自動で呼び出される特別なメソッド。**

#### コンストラクタの定義方法

下記2つの決まりを守ること。

**①コンストラクタ名は、クラス名と同じにする
②戻り値を書いてはいけない
(voidも書かない)**

“`Person.java
class クラス名{
コンストラクタ名() { // コンストラクタ名はクラス名と同じにする
// インスタンス生成時に行いたい処理
}
}
“`
■具体例

“`Main.java
Person pers

元記事を表示

忘備録_Logic

“`java.java

import java.util.Scanner;

public class ScannerInst {

public static void main(String[] args) {
var s = new Scanner(System.in);
int[] a = new int[5];
System.out.println(“————“);
for(int i = 0; i < 5;) { a[i] = s.nextInt(); if(a[i] >= 0)
i++;
}
System.out.println(“———–“);
for(int i = 0; i < 5; i++) { System.out.println(a[i]); } } } ```

元記事を表示

テスト駆動開発

# テスト駆動開発
[本書](https://www.amazon.co.jp/%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA-Kent-Beck/dp/4274217884)は、テスト駆動開発(Test-Driven Development)について書かれている。
第一部では、TDDで書かれた典型的なモデルのコードを例示している。実際のコードを見ることで、TDDのイメージが付く。それにより、テストコードを先に書き、設計を有機的に成長させる方法を学ぶ。
第二部では、より複雑なロジック(リフレクションや例外のテスト等)のテスト方法を、自動テストのフレームワークを実際に開発しながら学ぶ。
第三部では、どのようなテストを書くのかの判断に関するパターン、xUnitを使用したテストの書き方のパターン、リファクタリング方法などを学ぶ。

# テストとは
動詞では「評価する」、名詞では「合格か不合格かを判定する手順」という意味合いである。
テストを頻繁に走らせることで、ミスをしでかす確率を減らし結果的にストレスが減ってい

元記事を表示

OTHERカテゴリの最新記事