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

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

存在しない彼女へのアクセスによって起きるぬるぽをKotlinのNull Safetyの力で防ぐ

# 今日はなんの日?
今日はバレンタインらしいですが、特に変わったことがないのでいつも通りの記事を書きたいと思います。
# とあるコード
“`java
import java.util.Calendar;

class Chocolate {}

class Kanojo {
private Chocolate choco = new Chocolate();

Chocolate getChoco() {
return choco;
}
}

class Naotiki {
private Kanojo kanojo;
Kanojo getKanojo() {
return kanojo;
}

void eat(Chocolate choco){
System.out.println(“おいし~”);
}

public static void main(String[] args) {
//私のインスタンスを生成
Naotiki

元記事を表示

*作成中* 継承の多様性について

“`Parent.java
String val = “A”;

void print() {
System.out.println(val);
}

void difference() {
System.out.println(“super1”);
}

“`

“`Child.java
String val = “B”;

void print() {
System.out.println(val);
}
void print2() {
System.out.println(“sub1”);
}

“`

“`Main.java

package Sample;

public class Main {
public static void main(String[] args) {
Parent a = new Parent();
Parent b = new Child();

元記事を表示

【Java基礎】if構文-2.否定の条件分岐

[問題]  (参照:http://www.cc.kyoto-su.ac.jp/~mmina/bp1/hundredKnocksBasic.html)
整数値を入力させ、値が0ならばzero、0でない場合はnot zeroと表示するプログラムを作成しなさい。

# コード
“`Java
import java.util.*;

public class Main {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
if(t == 0){
System.out.println(“zero”);
}else{
System.out.println(“not zero”);
}
}
}
“`

↓「2」と入力

# 結果
“`
not zero
“`

元記事を表示

SpringBoot @GetMappingについて

@GetMappingアノテーション付きメソッドは、与えられたURI表現式と一致するHTTP GETリクエストを処理します。

“`java:PersonController.java
package com.informanaging.project.demo.controller;

import com.informanaging.project.demo.domain.Person;
import com.informanaging.project.demo.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RequestMapping(value = “/api/person”)
@RestController
public class PersonController {
@Autowired
private PersonServi

元記事を表示

Leetcode 1523. Count Odd Numbers in an Interval Range

https://leetcode.com/problems/count-odd-numbers-in-an-interval-range/description/

## アプローチ
### Brute force

“`java
class Solution {
public int countOdds(int low, int high) {
int total = high – low + 1;
if (total % 2 == 0) {
return total / 2;
}
if (low % 2 == 1) {
return total / 2 + 1;
}
return total / 2;
}
/* TLE
public int countOdds1(int low, int high) {
int count = 0;
for (int i = low; i <= hi

元記事を表示

Spring Boot WEBサービスを Azure App Service 環境で起動する (Docker イメージ版)

# Spring Boot WEBサービスを Azure App Service 環境で起動する (Docker イメージ版)

## 目的
[Spring Boot WEBサービス](https://qiita.com/hiroxpepe/items/4a0f5e077155ce41e7ac)を [Azure App Service](https://learn.microsoft.com/ja-jp/azure/app-service/overview) 環境で起動して理解を深めます。

## 実現すること

Microsoft Azure App Service に Spring Boot アプリの Docker イメージをデプロイします。

## 開発環境

+ Windows 11 Home 22H2 を使用しています。
+ [WSL](https://learn.microsoft.com/ja-jp/windows/wsl/about) の Ubuntu を操作していきますので macOS の方も参考にして頂けます。

WSL (Micr

元記事を表示

ChatGPT Java Interface実装

記事ディレクトリ
1. 記事の紹介
2. Java ベースの API を呼び出す
2.1 環境構成
2.2 コードを書く
3. 重要なまとめ
3.1 公式ウェブサイトのリンクアドレス
3.2 開発言語の例へのリンク
1. 記事の紹介
まず、ChatGPT公式 Web サイトにアクセスする必要があります。この Web サイトでは、呼び出しインターフェイスの多くの言語の例が提供されてChatGPTいAPIますjava,go,C#。

私は開発者なので、呼び出しインターフェイスjavaの使用方法を次のように詳しく説明します。javaChatGPTAPI

2. Java ベースの API を呼び出す
2.1 環境構成
公式ウェブサイトのリンク アドレスによると、クリックしてjava例にジャンプしますGitHub。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3148647/1f781852-0866-6c39-87a4-1b09981ee467.png)

GitHub上記にジャンプした後、

元記事を表示

springでListのstringなどの要素にvalidationのアノテーションを付与

“`java
import java.util.List;

import jakarta.validation.constraints.NotNull;
import lombok.Data;

@Data
public class SampleRequest {
List<@NotNull String> list;
}
“`

アノテーションを自作する場合は “`ElementType.TYPE_USE“` を使用する。

“`java
@Target(java.lang.annotation.ElementType.TYPE_USE)
“`

元記事を表示

プログラムからpdfの長体を入れる【iText】

# PDFで長体(縦に長いor横に長い文字)を入れたかった
元々はAmazonのFBA商品ラベルを自分で作りたかった。(物販の人向け)
セラーセントラルからダウンロードできるものは文字数によりフォントの横幅をコントロールして、表示される文字数を変えていた。

出来上がりイメージはこちら
![スクリーンショット 2023-02-13 16.47.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120789/facc2f32-78b5-60b2-9e57-737133bd4985.png)

## 行き着くまで
最初は文字幅を変えられるのかと思いきや、あんまりそんな情報が見つからない。
こんなんとか
https://helpx.adobe.com/jp/indesign/kb/4096.html

### PDFLibにはあるみたいだった
https://www.softel.co.jp/blogs/tech/archives/4897

### ただ、有償のものは避けたかったので他のライブラリで探す

元記事を表示

[Java] デザインパターン – Iterator

## 目的
以下の書籍を読んで、デザインパターンについて学習したため、その備忘録として記事を作成する。
* Java言語で学ぶデザインパターン入門 第3版 (著: 結城浩)

## Iteratorパターンとは
何かがたくさん集まっているときにそれを順番に指し示していき、全体をスキャンして処理を繰り返すもの。
* 具体例(配列`arr`の宣言は省略)
“`java
for (int i; i < arr.length; i++) { Sysytem.out(arr[i]); } ``` 上記のように変数`i`が添字として役割を果たし、ループごとに次の要素を指し示している。 ここで使われている変数`i`を抽象化し、一般化したものをデザインパターンでは「`Iterator`パターン」 と呼ぶ。 ## 実際に使ってみる ライブラリに、`java.util.iterator`のインターフェースがあり、以下メソッドを持つ。(詳細はURLを参照)

* forEachRemaining
* hasNext
* next
* remove

https://docs.oracle.

元記事を表示

【macOS】Spring Boot + MySQL + MyBatis を使ったアプリケーション作成

# 概要
Spring Boot + MySQL + MyBatisを使って、タスク管理アプリケーションを作成しました。
忘備録として、Spring Boot + MySQL + MyBatisの使い方と、作成したアプリケーションの起動方法をまとめます。

# 環境
* macOSバージョン:12.3.1
* Spring Bootバージョン:3.0.0
* Javaバージョン:17.0
* MySQLバージョン:8.0

# 事前準備
以下を参考に、MacにJava 17、MySQL 8.0、STS(Spring Tool Suite 4)をインストールします。
* [Javaのインストール手順](https://docs.oracle.com/javase/jp/17/install/installation-jdk-macos.html#GUID-F575EB4A-70D3-4AB4-A20E-DBE95171AB5F)
* [MySQLのインストール手順](https://prog-8.com/docs/mysql-env)

# MyBatisの使い方
MyBatisは、Ja

元記事を表示

Deprecated, SuppressWarnings

@Deprecatedをつけると非推奨
SuppressWarnings(“deprecation”)で警告を消すことができる
@Deprecated(forRemoval=true)をつけると非推奨削除予定
SuppressWarnings(“removal”)で警告を消すことができる

“`java
class Sample {
@Deprecated(forRemoval=true)
public void method() {
System.out.println(“—-“);
}
@Deprecated
public void method2() {
System.out.println(“—-“);
}
}
public class Outer {
@SuppressWarnings(“removal”)
public static void main(String args[]) {
Sample s = new Sample();
s

元記事を表示

SpringBoot Rest-Apiメール認証付きユーザー登録機能の実装

# 概要
SpringBoot Rest-APIでメール認証付きのユーザー登録機能を実装します。

# 開発環境
OS:windows10
IDE:IntelliJ Community
spring-boot-starter-parent 2.75
java : 11
postman : E2Eテストツール

データベース
mysql:8.0.29
クライアントソフト: MySQL Workbench
# ユースケース
大まかな流れとしては以下の様になっています。
1.ユーザーがEmailとパスワードを入力する
2.システム側がDBにユーザー情報が仮登録し、入力されたEmailに認証メールを送る
3.ユーザーが認証メールのリンクを開く。
4.システム側が顧客の状態を更新する。
5.アカウント登録完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/aa266e8e-529f-3a4b-0eab-c25d8800ac0c.png)

# 実装

## 作成したファイル一覧

元記事を表示

custom Annotation

NotNull Annotationを作り、NotNullチェックする
annotationで指定したメッセージを表示する
class定義からgetDeclaredFieldsでfield定義を取り出している
f.get(x(instance))でxから値取得する。
これをリフレクションという。

“`java
@Retention(RetentionPolicy.RUNTIME)
@interface NotNull{
String message();
}
class Sample {
@NotNull(message = ” is not null x1″)
private String name;
@NotNull(message = ” is not null x2″)
private String category;
private String city;

public Sample(String name, String category, String city) {
this.name =

元記事を表示

ABC289A~Eの解答[Java]

## はじめに
今回はコンテスト中にDまで、コンテスト後にEまで解けたのでそれを載せようと思います。

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

## A – flip
問題文は[こちら](https://atcoder.jp/contests/abc289/tasks/abc289_a)

先頭から文字を見ていって`1`と`0`を反転させて出力しました。
“`A.java
class Main{

static final boolean autoFlush = false;
static final Library System = new Library(java.lang.System.in,java.lang.System.out,java.lang.System.err,autoFlush);

public static void main(String[] args){

//Sの受け取り
String S = System.in.next();

//反転させて出力
for(char c:S.toCharArray())
System.out.p

元記事を表示

ABC288A~Dの解答[Java]

## はじめに
今回はコンテスト中にCまで、コンテスト後にDを解いたのでそれを載せようと思います。

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

## A – Many A+B Problems
問題文は[こちら](https://atcoder.jp/contests/abc288/tasks/abc288_a)

普通にA+Bを出力するだけですね。
“`A.java
class Main{

static final boolean autoFlush = false;
static final Library System = new Library(java.lang.System.in,java.lang.System.out,java.lang.System.err,autoFlush);

public static void main(String[] args){

//Nの受け取り
int N = System.in.nextInt();

//N回A+Bを出力する
while(N–>0){
System.out.println(System.

元記事を表示

RSA鍵を作る

OpenSSLで作ることが多いRSA鍵をJavaでざっくり作ってみた。Javaでもcrypto系のもので作ることはできるけれど手作り系。
一般的にTLSなどで使われるのは秘密鍵、公開鍵入り証明書の組み。今回は秘密鍵の計算部分。
セキュリティ的なところは保証しない。

# PKCS #1 / RFC 8017

RSAの方式はPKCS #1にいろいろあるのでRFC 8017でも見ることができる。
基本的なフォーマットはASN.1 (ITU-T X.680系)のDER。BASE64っぽいのはPEMという形。
さらにPKCS #8でも秘密鍵をくるむことができるのでどの形式なのか特定するのが厄介。
ASN.1のデータをバイナリにしたり読みやすくするのは*ER という名前が付いている。
バイナリで一般的なのがDERという形式。BER,CERというのもあったが厳格に型を決めていったのがDER。
RSAでは古めのCERもデコードはできた方がいいくらいで使われることがある想定だったかな。
テキストではプレーンっぽいもののほか、XML(XER)やJSON(JER)にもできるらしい。

– PKCS #1

元記事を表示

これから

改めて知識をアウトプットさせていきます。よろしくお願いします。

元記事を表示

新三和大神参观游玩攻略?

  转眼间,双丰面馆、三和市场、海新信都已不复存在。还记得在YouTube上被推荐到三和大神的故事,这内涵这感同身受的触觉,使人深深的被这一个个活泼的形象所打动到。

今天是一次心愿打卡之旅。吃完中饭,走起;我就是要去做这件我不知为何莫名其妙想做的事。世界那么大,而我想去看看三和大神。

**第一打卡点**:是没有目的地。
因为曾经的三和市场,海新信人才市场,变成了高大上的奋斗者广场,而且里面还围着;别提有多神秘了。反正这种坏了社会风气的事一定不要让人看到,嗯,尤其是nhk。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/652938/5a286320-41c3-311d-a51b-ffdf1c1daaff.png)

**第二打卡点**:双丰面馆
传说中的挂逼面也就这个了,由于也是在三和附近,所以也半天找不到地方,最后终于在大众点评上看到个地址:三联路8号。
去了之后,你懂的,又是奋斗者云云,从这个门口进去:
![image.png](https://qiita-image-s

元記事を表示

java forEach 備忘録

## 配列でforEach

Arrays.stream(配列の変数名).forEach
“`java
import java.util.Arrays;
//省略
public void forEachTest() {
String[] sampleArray ={“aaa”, “bbb”, “ccc”};
Arrays.stream(sampleArray).forEach(s -> System.out.println(s));
}
“`

## コンパイルエラー
forEachはvoid メソッドの為、値を戻すことができません
“`java
public Boolean forEachTest() {
String[] sampleArray ={“aaa”, “bbb”, “ccc”};
Arrays.stream(sampleArray).forEach(s -> {
//void メソッドは値を戻すことができません
if(s==”aaa”) {return true;}
});
return false;
}
“`

外側のスコープで

元記事を表示

OTHERカテゴリの最新記事