JAVA関連のことを調べてみた2022年08月29日

JAVA関連のことを調べてみた2022年08月29日

Java と JavaScript の違い(TypeScriptもあるよ!)

突然ですが皆さん、こう思ったことはありませんか?

**結局、Java と JavaScript の違いってなんなの??**

人によって、ハムとハムスターだったり、そばと焼きそばだったりします。
(ついでにTypeScriptのことを「型焼きそば」と言ったり……)

でもそれって、ニュアンス的に正確じゃない気がします。
なので今回は、Java と JavaScript(ついでにTypeScript) の違いを適切に解説します!

一応、出来る限り正確に書きますが、間違いがあればコメントいただけると幸いです…

# Java と JavaScript の違い

### 使用用途

* Java
– 主にサーバサイドの言語。処理ロジックを担当することが多い。

* JavaScript
– 現状、どちらでも扱うことが出来る。[^1]
[^1]: サーバサイドでJavaScriptを扱うには、Node.js等が必要です

* TypeScript
– JavaScript 同様、現状はどちらでも扱うことが出来る。[^2]
[

元記事を表示

Python,Ruby,PHP,Java,JavaScript,Perlの配列の比較

Python,Ruby,PHP,Java,JavaScript,Perlの配列の比較

# Python

https://qiita.com/gouwan/items/c83b47ce1b7c77cce7c5

# Ruby

https://qiita.com/may88seiji/items/ce9396a4c267a3d449ae

# PHP

https://qiita.com/tokutoku393/items/ea2a61765eda1dee8f2e

# Java

https://qiita.com/sentral1110728/items/532de46714b7215a2e99

# JavaScript

https://qiita.com/takeshisakuma/items/b23b1a748098f30e2ff2

# Perl

https://perlzemi.com/blog/20161012147627.html

元記事を表示

Keycloakで認証したユーザー名を大文字にする

# はじめに
Spring Boot ベースのWebアプリケーションで、Keycloakを標準のまま(ユーザーストレージなどのカスタマイズなし)利用していると、大文字のユーザー名でも、小文字で保存されてしまう問題に直面しました。[他の方の記事](https://qiita.com/rururu_kenken/items/7b334275560e4520863f)にもあるように、これが標準の動きっぽい。
システムのユーザー名は大文字英数字で構成されており、トークンの「preferred_username」クレームの値を画面表示などに利用しているため、回避策を調べました。

## 実行環境
– keycloak 12.0.4
– Java11
– Spring Security 5.4.5
– Spring Boot 2.4.3

# 回避策
Spring Security のカスタマイズ箇所を利用し、ユーザ名を大文字に変換する[OidcUserService](https://spring.pleiades.io/spring-security/site/docs/current/api

元記事を表示

【Angularアプリケーション開発 #12】APIを作成しよう

# はじめに
タイトルにAngularと書いていますが、今回はAngularのことは出てきません。
java側で各リクエストに応じたAPIを作ってきたのでご紹介します。

## 前提
従業員テーブルに対してCRUDになります。
id,nameをカラムに持っています。
APIのメソッド名は適当につけています。参考にしないでください。

## 各種API

### 取得
テーブルに存在するレコードを全て取得

“`java
// 取得
@GetMapping(“api/getUserInfo”)
public List getHoge() {
List> userInfoListMap;

List userInfoList = new ArrayList();

userInfoListMap = jdbcTemplate.queryForList(“select id,name from userinfo”);

fo

元記事を表示

【Java / Kotlin】Entityでよく使うカラムを共通化する

## はじめに

Entityでよく使うカラムの共通化の仕方について、
考えたことをまとめておきます。

## Javaで共通化

各テーブルに共通して存在するカラム(たとえば `created_at`とか)は抽象クラスに切り出し。

– 抽象クラス

“`java:CommonEntity.java
/**
* 共通Entity(各テーブルで保持する項目)
*/
@MappedSuperclass
@Data
public abstract class CommonEntity {

@Column(updatable = false)
private String createdBy;
@Column(updatable = false)
private LocalDateTime createdAt;
private String updatedBy;
private LocalDateTime updatedAt;

// 登録前に共通的に実行されるメソッド(呼び出し不要)
@PrePersist
public void preInse

元記事を表示

Springのバリデーションで任意の順番(タイミング)で処理させる方法(@GroupSequence)

備忘です。苦労したのと色々よくわからないので。

例えば以下のように一つの項目にいくつかのバリデーションが設定されていたとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631579/7e7312f8-a7ea-d1d3-2feb-947959669ef1.png)

このプログラムを起動させ、何も入力せずに、処理を行おうとするとバリデーションが働いて以下のような赤文字のエラーが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631579/773bdc66-4d18-80f4-ab5a-9d8d1a471591.png)

この社員番号ですが、何も入力していない場合は、「社員番号を入力してください(@NoBlank)」だけ表示させたい(「数字を入力してください」と「10文字以内で入力してください」は表示させない)場合の記事です。

以下方法。
こんな感じでインター

元記事を表示

RubyからJavaに移行する時の考え方

# 主な違い
今までrubyを学習してきて、仕事でjavaを使うことになりました。
rubyと違うところがあったので、自分なりにまとめてみたいと思います。

`Java`コンパイラによってコンパイルされる静的型付け言語
`Ruby`インタプリタによって解釈されるスクリプト言語で、動的型付け言語

上記が一般的に説明されている説明となります。

自分の言葉で説明すると、
`Java`は型を宣言するのでコードが長くなるが、大規模開発などたくさんの人が関わる開発に向いている。習得の難易度は`Ruby`よりも高め。`Ruby`は、型を宣言する必要がなく短くて直感的にコードを書ける。アジャイル開発に向いている。習得の難易度が低いことや、日本語のドキュメントが充実しているので、プログラム初心者に向いている。

# システムの違い

サーバーやデータベースの違いについて、表を作りました。(下記)

[]()![JavaとRailsの比較最終-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2661107/f5f88

元記事を表示

ABC266A~Eの解答[Java]

## はじめに
今回も4完で、Eはコンテスト後に解いた物です。

では、見ていきましょう。

## A – Middle Letter
問題文は[こちら](https://atcoder.jp/contests/abc266/tasks/abc266_a)

真ん中を出力する問題ですね。
たとえば5文字の時は3文字目なわけですが、3文字目のindexに着目しましょう。
先頭から0、1、・・・と数えるので、3文字目は2です。
ではN文字のときはどうでしょうか。文字列の長さは奇数だと制約にあるので、(N+1)/2文字目だとわかります。さらにindexは(N-1)/2になります。ということで、Sをchar型配列として受け取ってS[(S.length-1)/2]を出力すれば良いです。
なお、S.lengthは奇数なので、(S.length-1)/2もS.length/2も同じ値になります(小数点以下は切り捨てられるので)。
“`A.java
class Main{

static Library System = new Library(java.lang.System.in,java.

元記事を表示

ロケールによって小数点がピリオドかコンマかが変わるので数値⇔文字列変換に注意しよう

ロケールによって数値表現が変わるので注意しようってお話です
特にユーザー端末で実行されるアプリでは、様々なロケールでの動作を考慮する必要があります

日本語や英語では小数点に「.」(ピリオド)を使用するため、これ以外の表現が使われることを意識していない人も多いのではないでしょうか?イタリア、ドイツ、フランス、ロシア語などでは「,」(コンマ)が使われるため、変換時に「.」(ピリオド)が使われることを前提にしていると不具合になってしまう場合があります。

ということで、以下を実行してみましょう。

“`kotlin
fun main() {
Locale.setDefault(Locale.JAPAN)
println(“%.1f”.format(1.1))
println(1.1.toString())
println(“1.1”.toDoubleOrNull())
println(“1,1”.toDoubleOrNull())
println(DecimalFormat().parse(“1,1”).toDouble())

p

元記事を表示

Python,Ruby,PHP,Java,JavaScript,Perlの繰り返し構文の比較

Python,Ruby,PHP,Java,JavaScript,Perlの繰り返し構文の比較

# Python

https://qiita.com/atsui-ocha/items/5b8e4f973b36e78fdaf1

# Ruby

https://qiita.com/beanzou/items/6231d3d0a926765ddbb4

# PHP

https://qiita.com/rana_kualu/items/0abd2b6f69527b0b4b92

# Java

https://qiita.com/morioheisei/items/e686e33b60c6a60e87f0

# JavaScript

https://qiita.com/tetsuyakojima/items/fd63f91a4e34d6bad28b

# Perl

https://perlzemi.com/blog/20170521149524.html

元記事を表示

A problem tracing experience of application support

# Symptom
A user reported that in the saved report of a application, all fields related to time are changed, changed to 1 hour earlier to original value. This happened recently and there was no problem in the past.

Simple to say, the application is build by Spring Boot, and details are:
– Java 8
– Spring MCV
– Spring Data JPA
– JPA (By Hibernate)
– MySQL

# Investigation direction: Time zone
In the UK, time zone will be changed 2 times per year. And there is one hour difference between two time

元記事を表示

Javaの学習 ~String~

### Stringクラス
java.lang.Stringクラスのこと。配列を内部に隠蔽しているため、文字列操作が可能なメソッドを提供することができます。

#### Stringクラスのインスタンス生成

“`java
String a = new String(“こんにちは”); //newを使う

String b = “こんばんは”; //newは省略できる

//☆文字列であるため、ダブルクォーテーション!
“`
#### Stringオブジェクトは不変な(immutable)オブジェクト
オブジェクトに一度セットしたフィールドの値を、後から変更できるオブジェクトを「可変なオブジェクト」、変更できないオブジェクトを「不変なオブジェクト」と呼びます。
その「不変なオブジェクト」の代表例がStringオブジェクトです。

不変と聞くと全く中身を変えることができないように感じますが、
以下のコードで見てみると犬が猫に変わっていることが分かります。
“`java
String str = “犬”;
str = “猫”;
System.out.println(str);

元記事を表示

IBM Cloud Code Engineにアプリケーションをソースコードから直接デプロイしてみる

# はじめに

前回まででIBM Cloud Code Engine上にPlay Frameworkで作ったアプリケーションをデプロイしてみましたが、そのままだとコード開発の後にデプロイを行うまでかなりの手動ステップを必要とします。

– `sbt dist`でパッケージを作成
– zipファイルを展開
– dockerイメージを作成
– container registryへpush

これを解決する手段としてはまずCI/CDパイプラインを導入することが考えられますが、IBM Cloud Code Engineではアプリケーションをデプロイするのに作成済みのイメージを使用する他に、直接ソースコードからイメージをビルドしてデプロイする方法も提供しています。今回はそちらの機能を使って上記の手動ステップを行わずにアプリケーションをデプロイする方法を探ってみます。

# GitHubにリポジトリを作成

まずはGitHub上に空のリポジトリを作成します。Repositoriesのタブから”New”をクリックして以下の画面で名前をつけます。

![スクリーンショット 2021-12-24 1

元記事を表示

正規表現による複数行の置換(VSCodeでBuilderパターンをコンストラクタに置換)

# やりたいこと

“`java
// 現状
Foo.builder()
.hoge(“a”)
.huga(10)
.build();

// こうしたい
new Foo(“a”, 10);
“`

例としてJavaのコードを扱います。Builderパターン[^builder]をやめてコンストラクタでインスタンスを生成したいという設定です。
本記事はVSCodeで検証しました。(ツールによっては`\n`に非対応ということもあるかもしれません。)

# 「現状」とマッチングする正規表現(シンプルなケース)
“`text:「現状」とマッチングする正規表現
Foo\.builder\(\)[\s\S\n]*?build\(\);

(見やすさのために改行を入れると)
Foo\.builder\(\)
[\s\S\n]*?
build\(\);
“`

正規表現[^dotnet]がどう働いているかというと、
– `Foo\.builder\(\)`で始まる部分を指定します。
– `[\s\S\n]`は改行コード含む全文字を示します[^ref_q

元記事を表示

【Java】throwとthrowsの使い方を簡潔に説明してみる

# はじめに

今回の記事はthrow、throwsの解説を簡潔に書くことを目的としているため、検査例外・非検査例外とは何か等の細かい内容は省かせていただきます。お許しを。

# 実行環境
OS:Windows10 バージョン20H2
言語:Java 8
使用ツール:Spring Tool Suite 4

## 1. throw
### 1-1. throwとは

***例外を意図的に起こすことが出来る処理のこと。***

### 1-2. 使い方
throw new 例外クラス名();
### 1-3. 使用例
“`Sample.java
public class Sample {
public void hello(String name) {
if (name == null) {
throw new IllegalArgumentException();
}
System.out.println(name + “さん、こんにちは!”);
}
}
“`

“`Main.java
public class Main {
publi

元記事を表示

Houdiniを学習してみて(1週間経過)

学習しはじめて1週間
毎日仕事+3時間やると疲労が蓄積していますが、習慣になりつつあります。

仕事はWeb系(PHP,java)のエンジニアですが、
かねてよりやりたかったデザイン系のお仕事へジョブチェンジします。

1週間学んでみた感想は、
**Houdiniがエンジニアと相性いいかもしれない??**
でした。

教材や公式サイトを見ていると、
エンジニアで得た知識も全く無駄にはならなそうだなという印象を受けました。

例えば、
・相対パスや、演算子まわり
・[Houdiniで利用できるスクリプトのVEXの書き方](https://www.sidefx.com/ja/docs/houdini/vex/lang.html)
など

VEXは型に厳しいそうなので、Javaと言語的に近かかったりしてと思い調べてみたら、
>VEXは制限の緩いC言語ベースですが、RenderManシェーディング言語と同様にC++の考え方を採用しています。([出典](https://www.sidefx.com/ja/docs/houdini/vex/))

とのことでした。
プログラミング言語の歴史をたど

元記事を表示

プログラミングで、2次元平面のある点の周囲の点の座標を表現する方法

## 内容
タイトルの通りで、
プログラミングで、ある座標の周囲にある8つの点(8方位の点)をXY座標でどのように表すかという内容です。

原典はAtCoderの問題の解説です。 個人的に、解説の理解に時間を要したので、わかりやすく噛み砕いて説明しようと思います。

## コード
“`SurroundingCoordinates.java
public class SurroundingCoordinates {
public static void main(String[] args) {
int x = 0;
int y = 0;

// (1)
int[] distances = {-1,0,1};
int size = 0;

// (2)
for(int dx : distances){
for(int dy : distances){
if(dx == 0 && dy == 0) continue

元記事を表示

Python,Ruby,PHP,Java,JavaScript,Perlの条件分岐の比較

Python,Ruby,PHP,Java,JavaScript,Perlの条件分岐の比較

# Python

https://qiita.com/Morio/items/1e06e7ac768758af5ffe

# Ruby

https://qiita.com/sagawashu/items/0f08266d5f72229423d9

# PHP

https://qiita.com/Hashimoto-Noriaki/items/dfb76d440a64eccba95d

# Java

https://qiita.com/setonao/items/ebc341ddf6d95295c48e

# JavaScript

https://qiita.com/taiju_suzuki/items/e2bf11fcf1645623235f

# Perl

https://perlzemi.com/blog/20161023147731.html

元記事を表示

java: ディレクトリ一覧を取得、ソートして、指定数以上のディレクトリを削除

#### 指定したパスのディレクトリ一覧取得

“`java
File[] dirList = new File(“./”).listFiles(File::isDirectory);
if (dirList == null) {
logger.warn(“directory not found”);
return;
}
“`

#### 古い順にソート
“`java
Arrays.sort(dirList, new Comparator(){
public int compare(File f1, File f2)
{
return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
}
});
“`
↑はメソッド参照を使うととてもシンプルになりました…
[コメント](https://qiita.com/yulily@github/items/92c8dc3ba46db7acefd9#comment-752989e78ca7d4620

元記事を表示

【Spring】特定のExceptionを発生させた際に独自のエラー画面を表示したい

# はじめに
業務でJavaを使うことになったが、少しブランクがあるため、記事としてまとめる。

# 背景
DBから値を取得するメソッドを使用した際に、検索結果が0件であった場合に
独自のExceptionを発生させるメソッドに出会った。また、このメソッドを使用
し、検索結果が0件であった場合500エラーが表示されてしまう。

今回、上記メソッドを使用した際には、HTTPステータスを404で返却し、
かつ既存の404エラーページではなく専用の404エラー画面を表示したい
という依頼である。
# 内容は一部ぼかしている

# 方針

特定のメソッドを実行する際に、0件であった場合に自作したExceptionを投げ、
そのExceptionを検知する。最終的に独自のエラー画面を呼び出すようにする。
# それ以外の404の場合は、既存のエラーページを呼び出す。

“`java:呼び出し元.java
int id = 1;

// idを元にDBから値を取得し、TestDetailに格納する(取得出来なければ独自のExceptionを投げる)
TestDetail detail = Te

元記事を表示

OTHERカテゴリの最新記事