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

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

Lombokのカスタムアノテーションを作ろうとして諦めたメモ

Lombokのカスタムアノテーションを作ろうとして諦めたメモです。

3行でまとめ:

1. Lombokのアノテーション実装ではJava内部クラス(コンパイラ関連)を参照する。
2. Java9 以降、Java内部クラスの参照方法がビルドシステムやIDEで大きく変わり、難易度がめちゃくちゃ高くなった。
3. アノテーションを集約するメタアノテーション的なのもLombokでは未対応なので、打つ手なし、ギブアップ。

作ろうとした経緯:

1. `@Value` 大好きなんだけど、Eclipse上からlombokが作成したgetterの利用箇所を Ctrl + Shift + F で逆引きできない。というかしづらい。
– ソースコード上にはgetterは無いので当然といえば当然。
– 一応、Outlineビューで表示すれば getter も見えるので、その getter を右クリックして “References” メニュー選べば参照箇所逆引きできるけど、まぁめんどいっちゃめんどい。
– 参考: https://stackoverflow.com/questions/42

元記事を表示

Angularチュートリアル + SpringBoot + PostgreSQLをやってみた

# Angular + SpringBoot + PostgreSQL

## はじめに
フロントエンド: Angular(TypeScript)
バックエンド: SpringBoot(Java)
DB: PostgreSQL

こちらの記事を参考にして、タイトル通りのものを作ってみました。
[Angularチュートリアル + Spring Bootやってみた](https://qiita.com/panichi/items/7e17820d02fa274bf04a)

## 前提条件

[Spring Initializer](https://start.spring.io/)でプロジェクトを作成していること
Maven Projectで作成し、
Dependenciesは`postgreSQL Driver`と`Lombok`を入れました。

名前は適当に

環境
– Mac OS Catalina 10.15.2
– Intellij Community 2019.3.1
– Java 11
– PostgreSQL 12.1

この記事ではMacでやっていますが、Wind

元記事を表示

Groovy超簡単入門

##Groovyの紹介
Groovyは2003年開発されたJavaプラットフォームで動作する動的プログラミング言語であり、直接スクリプトで実施することを特徴としています。

##Groovyプロジェクト作成

まずは、簡単なJava Beanを作ります。

“`java

public class Cat{

/**The name of the cat*/
private String name;

/**The age of the cat*/
private int age;

/**Constuct*/
public Cat(String name, int age) {
this.name = name;
this.age = age;
}

/**Get the cat name*/
String getName() {
return name
}

/**Set the cat name*/
void setName(Strin

元記事を表示

OpenJDKについて簡単に整理

#はじめに
開発言語のJava。
はいくつか種類があるって知ってました?
簡単に知識整理をしておきたいと思います。

#OpenJDKとは
+ Open Java Development Kit
+ Java のフリーかつオープンソースの実装。
+ 2006年、サン・マイクロシステムズが始めた。
+ GPLリンク例外つきの GNU General Public License (GNU GPL) でライセンスされている。
+ OpenJDKはJava SE 7以降の公式リファレンス実装とされている。
+ 参考:https://ja.wikipedia.org/wiki/OpenJDK

その他の用語と合わせてみると。

|用語|説明|
|—|—|
|Java SE|Java Platform Standard Edition。**仕様**の集まり。|
|OpenJDK|Java SE に基づいた開発を行っている**オープンソースプロジェクト**。ソースコードが管理されている。|
|JDK|Java Development Kit。**Oracle**が提供するJava SE開発

元記事を表示

[写真整理][java][windows]選択した写真を2クリックでフォルダに移動する

###フォトビューアで参照している写真を★★★のフォルダに振り分けを行います

フォトビューアから、これを起動すると、今いるフォルダの一つ上に★★★をつくり、★★★に移動します。

![20.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490393/e63504bc-0f95-1376-d481-8e0407173d90.jpeg)

Exe加工はlaunch4j等にて実施しています。
http://launch4j.sourceforge.net/

フォトビューアを有効にするにはこの辺りを参考に。レジストリを編集するのが手っ取り早いです。
https://popozure.info/20190823/14633

###実行ファイルのダウンロード
きっと実行ファイルだけが欲しいかと思いますので
こちらからダウンロードしたいただけば実行ファイルを入手できます。
https://drive.google.com/open?id=1dKcispHr8_D81kaPRgID7oKf27bEMfvS

##

元記事を表示

【資格試験】Java SE8 Silver学習方法まとめ

#はじめに
最近Java SE8 Silverの資格を取得しました。
このあとJava SE8 Goldも受験予定なので、諸々振り返りと今後の整理をするためメモにまとめます。

あくまで個人的な意見ですが参考になれば幸いです^^
また、間違いや異なった意見を持ってる方いらっしゃったら、コメントいただけると嬉しいです!

※本めもは、企業でしっかり研修などを受けて受験する方というより、個人的に資格取得を目指している初学者の方向けな感じです。(私がソンな感じ)

#受験者のバックグラウンド
十数年前に1ヶ月ほど、入社時研修としてJava研修を受けた事があります。
その後は、ほぼプログラミングに関わる事なく10年ほど金融系企業向けのアカウントSEをしておりました。そのため、プログラマーとしては下の下。現在駆け出し中です(笑)

※ちなみに、Androidエンジニアとして転職して2ヶ月半ほど経ちます。現在、Java,kotlin双方で開発を行なっています。

#Java Silver SE8 試験について
OracleのJavaSE8認定資格公式ページより概要を抜粋します。
>Oracle C

元記事を表示

C#とJavaの書き方の違いをまとめる

## 前置き
いつもはC#で開発をしていますが、使用するAPIにC#用のインターフェースがまだ整っていなくJavaで開発を始めてみました。
あまりJavaは触ったことがなかったため、C#でいう「xxxx」はJavaでいう「xxxx」というのをまとめてみました。
私がよく使っている予約語、実装方法が中心となっています。そのため全ての違いが網羅できているわけではありません。

## C#とJavaの予約語、実装方法の違い

### 予約語の違い
C#、Javaでの予約語の違い、変わらない点をまとめてみました。
同じ、似ていると思った項目を横並びにして比較してみます。

|差異|C#|Java|備考|
|:——|:——————|:——————|:——————————————————————|
||namespace|package||
||using|import||
|なし|class|class||
||:|extends|クラス継承|
|なし|

元記事を表示

安易なメソッド参照は気を付けるべし

#導入
こんにちは。けちょんです。
**皆さん、メソッド参照使っていますか?**
便利だし、可読性も上がりますよね。
そんなメソッド参照で。気を付けるべき仕様があったので紹介します。

#よくやる使い方

“`Java
public class Main {
public static void main(String[] args) throws Exception {
Arrays.asList(“test1”, “test2”).stream().forEach(System.out::println);
}
}
// test1
// test2
“`
staticメソッドをメソッド参照していますね。
他にもこんな使い方ができますね。

“`java
public class Main {
public static void main(String[] args) throws Exception {
Arrays.asList(“test1”, “test2”).stream().map(String::toUpperCase).forEach(Syst

元記事を表示

現場で「StreamAPI使うな」と言われたあなたへ

寒暖差激しいですね。
暖かい日しか出社したくないですが、人は習慣に飼いならされることで怠惰にならなくて済むので、定時出社という悪しきルーティンを受け容れようかなとか思っています。

## 「ストリームの乱用はプログラムの理解や保守を難しくする」
> Effective Java第3版より
“ストリームの乱用はプログラムの理解や保守を難しくする”

いきなりですがこれが結論です。短くて読みやすいコードは素晴らしいです。しかし、StreamAPIは、短くて難解なコード、長くて難解なコードを生み出すことも容易です。私をはじめ、StreamAPIを理解しきれていない人が実装する際は、プログラムの可読性悪化のリスクを常に認識しなければなりません。
これはすなわち現場のプログラマの問題であり、StreamAPIが悪い訳ではないということです。
StreamAPIが書きたければ、場所を変えましょう。あなたの実装したStreamAPIによる簡潔なコードが、コピペによる濫用によってそこかしこに広がり、問題の種になる前に。

## 短くて読みやすいStreamAPIによる実装
とはいえ、このまま終わって

元記事を表示

JavaFXのWebViewで絵文字が出ない問題への対処

JavaFXのWebViewに文字列を出そうとした時に大抵の日本語は出るのだが、絵文字&他にも一部の文字(?とか ?とか)が出ない問題が起きた。

Javaの内部ではUTF-16で扱っていて、UTF-8にする時にサロゲートペアで扱われている文字がおかしくなるようだ。

HTMLには数値文字参照という文字のコードポイントを直接指定して文字を出す機能がある。
(書き方は“`&#x{16進};“` または “`&#{10進};“`)

例えば HTML上に“`💯“` とかくと?になる。

この機能を使い、以下のコードでHTMLに出力される文字列が数値文字参照になるようにして解決した。

“`java
String toCharacterReference(String str) {
int len = str.length();
int[] codePointArray = new int[str.codePointCount(0, len)];

for (int i = 0, num = 0; i <

元記事を表示

ダウンロードできてたCSVファイルが、突然ページ表示されるようになった。

突貫工事で、複数人が入力したデータを、CSV形式でファイルダウンロードするWebアプリケーションをリリースしました。
利用したのは以下のOSSです。

* Spring Boot 2.2.4.RELEASE
* 組み込みのTomcat 9.0.30
* Chrome 79.0.3945.130

運用開始当日は特に問題がなく、退社して友達と飲んでたら、何やら自分のスマホが騒がしい。。。着信に出てみると「ダウンロードができない」との連絡が。詳細を確認すると「3時間前まではダウンロードを行うとCSVファイルが出力されていたのに、突然、ブラウザ上にCSVが表示されるようになった」とのこと。

友人に誤り、飲みを切り上げ、原因の調査を開始。一応、こう修正すれば動くというが判ったので、まずはサービス優先でリリースしました。しかし、原理が不明なままなので、継続調査を実施しました。

## 修正の内容

以下は、今回の問題となったダウンロード処理の簡略化したコードと、修正後のコードです。

* 修正前

“`kotlin
@PostMapping
fun export(respon

元記事を表示

SpringBootアプリケーションの運用を楽にするための機能、SpringBoot Actuatorのご紹介

# 急いでいる人へのまとめ
– SpringBoot Actuatorを使うと各種情報が簡単にとれる
– 最小限の機能を使うには、依存ライブラリの追加と設定のみ
– システム稼働情報の参照、変更ができるようになるのでセキュリティには注意

# システム運用で必要な機能とは?

システムは作って終わりではなく、安定稼働させたり、どれぐらい使われているかなどの運用も大事ですよね。
DevOpsや最近のアジャイルでも、如何にリリース後のフィードバックを受けて次の戦略を取っていくかを大事にしています。フィードバックとは利用者から、「こうしてほしい」「こんな機能がほしい、いらない」だけではなく、システム運用者から「この機能が使われてないんだけど」とか「この機能が急に使われ始めた」という提供者側からの気づきも大事になります。

後者の今のシステムで必要な情報を取るための機能がSpringBootではSpringBoot Actuatorという機能が用意されていますので、そのご紹介となります。

# SpringBoot Actuatorとは?

SpringBootの拡張機能で、各種情報が簡単に

元記事を表示

ID を格納する変数を int/long でなく ID 型にする (Java)

# 概要

ID を持ちまわる際、通常なら int, long, String などに格納するわけだが、これだと下記のような場合にちぐはぐになって分かりづらくなる可能性がある。

“`java
public someMethod(int hogeId, int fugaId) { … }
“`

これをこうできればケアレスミスを防げる。(ちぐはぐにするとIDEがエラーとなって教えてくれる。)

“`java
public someMethod(HogeId hogeId, FugaId fugaId) { … }
“`

#### 注意ポイント

これは分かりやすくなる一方で、気を付けるポイントがある。

1. Jackson で JSON に/から変換可能であること
2. MyBatis でパラメータ/結果として扱えること
3. Spring MVC の URL パラメータや `@RestController` の 戻り値 として扱えること
4. Id のクラスを沢山作ることになるので個々には面倒な記載が要らないこと(親クラスに実装もたせる)
5. パフォーマンスが損

元記事を表示

Spring boot サンプルプログラムでポートを使えなくなった話

#ポートに誰かが居座っている
“`
Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port.
“`
なんだこいつは。一回目は起動していたのに。
文脈か察するに、ポートがすでに使われているみたいだ。

#本当かどうか確認してみる
cmdから

“`
netstat -an
“`
で確認してみる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233158/f57704f7-c5a5-c025-1df5-ed9796c499e4.png)
確かに、8080がLISTENINGになっている。
これは別のアプリケーションが独占しているという認識でいいのだろうか。いったん前提をそれとして作業を、
**1. 動いているアプリを突き止めて終了する(仮定:多分前動かしたjavaがまだ居座っている?)**
**2. 1の仮

元記事を表示

Resultsetのnext()を、次があるかの判定メソッドと勘違いしていた件

##事象
とあるコードで、SELECTクエリを投げ、
その取得結果を**ResultSet型の変数rset**に格納している箇所がありました。

コード読解のためrsetの要素数を確認したいと思ったので、
以下のコードを途中に追記して実行しました。

“`java:example.java
int testIndex = 0;
while(rset.next()){
System.out.println(“rsetの要素数を確認したい”);
System.out.println(++testIndex);
}
“`

そうしたら、(それまでは正常終了していたのですが、)
その後ろの処理で、以下の例外が発生しました。

**java.lang.IndexOutOfBoundsException: Index: 0, Size: 0**

##読解のはずが壊してしまっていた
おかしいなと思って見てみたら、next()の理解が誤っていました。
現在の位置から次の1行へ進んでカーソルを当てる機能もあるのですね。

上記のコードで、最後の要素にカーソルがあたったままループを抜

元記事を表示

Eclipseのヒープサイズを増加させる(メモリ不足エラーを解消する)

# はじめに
Eclipseのプラグインを追加するとき、メモリ不足エラーと表示され実行できなかった。
そこでヒープサイズを増加させ、問題を解決した。

# 環境
Eclipse Photon Release 4.8.0

# 試みたが失敗したこと

Eclipseのインストール先にある”eclipse.ini”を書き換える。

“`
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
–launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20120913-144807
-product
org.eclipse.epp.package.jee.product
–launcher.defaultAction
openFile
–launcher.XXMaxPermSize
256M
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Dhelp.lucene.t

元記事を表示

【Java】じゃんけんの手の出し方 (paizaランク A 相当)

#paizaって?
[paiza公式サイト](https://paiza.jp/)
なんかプログラムを書いて、それにランク付けて評価してくれるところ
求人中の企業に対して自分のプログラミング能力をアピールできる
(実務的とは思えないがちゃんと解ければ最低限の能力があると見れるだろう)

#今回解く問題
[問題:じゃんけんの手の出し方](https://paiza.jp/works/mondai/skillcheck_sample/janken?language_uid=java&t=2fe1248410effabab1f3cfb75c9aace8)
・総勝負数N
・総指数M
・相手のハンド列S
の3つが入力として与えられ、総勝負数および総指数をきっちり使った時の相手ハンドに対する最大勝利数を割り出す問題
細かくはリンク先

#解答コードと結果
“`java
import java.util.ArrayList;
import java.util.Scanner;

/**
* じゃんけんの手の出し方 (paizaランク A 相当)
*/
public class AS001{

元記事を表示

プロジェクト毎にJVMを切り替えるには

#起動時、コンパイル時にJDK,JVMを切り替えたい

Javaの勉強をしているとプロジェクトによって別のバージョンを使いたい時がある。例えば私は最新のjava10以降のvar型推論が好きだけど、業務ではjava8しか使えない。常駐先によってはjava4のところも
あった。
あえて古い環境で勉強しないといけない事もあるわけです。
というより2020年現在、業務でjava10なんてまず使えない・・
eclipseとかだとjvmの指定する画面があるけど、実際コマンドラインではどうやって指定するのだろうか、という実験です。
#java -version でどこのJVMを読み込んでいるか確認する

java12でコンパイル済みのMain classがあり、
環境変数JAVAHOME には java12のJVMへのパスが設定されているとする。
その状態で任意のディレクトリにjava8のJVMのJVMを配置し、その中のjavaコマンドがあるディレクトリに入って

“`bash:bash
java -version
“`

コマンドを叩く。
すると

“`
java version “12.

元記事を表示

シンプレックス法をGUIでシミュレーションする

#1.プログラムの概要
 このプログラムは、線形計画法における、最大化関数の最適解を求めるプログラムである。線形計画法(最大化の場合)では、最大化関数と制約条件がある。最大化関数は、1次関数であり、最大化を目的とする関数である。制約条件は、1次不等式や1次等式であり、最大化関数の解の範囲を定める式である。ただし、このプログラムでは、最大化関数も制約条件もそれぞれ2変数(X,Y)とする(このプログラムにおける、最大化関数と制約条件の詳細については、3章の操作方法を参照)。最適解を求めるアルゴリズムとして、シンプレックス法がある。シンプレックス法は、実行可能領域のある点をスタート地点として、その点を最大化関数が大きくなる方に移動させることを繰り返す。点の移動が止まったときに、最大化関数が最適解となる。このプログラムでは、ユーザが最大化関数と制約条件を入力して定める。そして、入力された最大化関数と制約条件をもとに、シンプレックス法による点の移動をシミュレーションし、最適解を求め表示させる。ただし、このプログラムは、あくまでGUIでシンプレックス法の点の移動をシミュレーションしているだけであり

元記事を表示

[Android] TextView の textScaleX を自動調整する

# 何を作ったか
限られたスペースしか使えない状況で TextView に長い文字列を表示させようとして、途中で文字列が切れてしまい見た目がよろしくない経験は多々あるでしょう。解決策はいろいろあるでしょうが、ここでは textScaleX と呼ばれる TextView の属性に注目します。表示する文字の横方向への伸縮倍率を表す値であり、1より大きい値なら文字列を伸ばし、逆に1より小さな値なら文字列を収縮させます。TextView の最大横幅に収まり切らない長さの文字列を表示するときに、この textScaleX の値を自動で調節して文字列の長さを圧縮する View を作りました。クラス名は ExpandableTextView とでも呼びましょう。

## デモ画像
分かりやすさのため、ExpandableTextView の背景を灰色にしてあります。
![expandableTextView_demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440643/b7d1f051-24a0-11f2-3

元記事を表示

OTHERカテゴリの最新記事