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

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

ProtocとWireで生成されるJavaファイルとバイトコードのサイズを比較してみた

GradleでProtocol Bufferを使う時には[GoogleのProtobuf Plugin for Gradle](https://github.com/google/protobuf-gradle-plugin)か[WireのGradle Plugin](https://github.com/square/wire/blob/master/wire-library/docs/wire_compiler.md)が主流だと思いますが、それぞれのコンパイラ(protoc/wire)で生成されるJavaファイル(およびKotlinファイル)のサイズと、さらにそれをJVMバイトコードにコンパイルした時のファイルサイズを比較してみました。

きっかけはSquare社の[Introducing Wire Protocol Buffersという記事](https://developer.squareup.com/blog/introducing-wire-protocol-buffers/)で、Protocol Bufferの実装を**protocからwireに変えたらメソッドが10,0

元記事を表示

【Java】独自クラスのListで重複した要素を除外する

# はじめに

Javaにて自分で作成したクラスのListから重複した要素を除外する方法について、いつもやり方を探してしまうので個人的なメモとしてまとめてみます。

# 前提

こんな感じの`Person`クラスがあったとします。

“`java:Person.java
public class Person {
private String id;
private String name;
private int age;

public Person(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}

public String getId() {
return this.id;
}

public String getName() {
return this.name;
}

public int ge

元記事を表示

[Android] Jetpack ViewBinding

Android Studio 4.1.2(windows版) で動作検証してます

ViewBindingを採用することで各コントロールをfindViewById()で呼び出さなくてもよくなりました
Android Developerの説明にある通りnullや型の安全性があるので積極採用する流れになると思います
※ActivityやFragmentでコントロールのIDに重複が無いように定義する必要があります

ViewBindingはAndroid Developerの説明で十分理解ができるかとは思いますが軽く説明してみます

Android DeveloperのViewBindingの説明は以下です

https://developer.android.com/topic/libraries/view-binding?hl=ja#java

## ViewBindingを使用するための設定
build.gradleに以下を追加します
ViewBindingを有効にするとBindingクラスが自動生成されます

“`build.gradle
android {
viewBin

元記事を表示

[Android] ボタンイベントのベスト実装パターンを模索

Android Studio 4.1.2(windows版) で動作検証してます
Javaでの実装中心の話となってます

Androidでボタンイベントを実装する方法はいくつかあります
みなさまはどの実装パターンを採用しているでしょうか?
すでにいろいろな方が同じような内容をまとめてくれていますが
実装に迷っている方もいるかもしれませんのであえてこちらでまとめています

Android DeveloperのButtonの説明は以下です

https://developer.android.com/guide/topics/ui/controls/button?hl=ja

## findViewById()でボタンを取得し直接setOnClickListener()で実装(匿名クラスで実装)
Activity/Fragmentで実装方法がほぼ同じなため
onCreate()あたりで以下のような実装をするパターンが多いのではないでしょうか?
私も脳死状態でよくこのパターンをコピペで実装してしまってます

“`Java:Java
findViewById(R.id.button).set

元記事を表示

Android Studio ToDoListアプリ制作(動画有り)

今回はToDoListアプリを制作しました。
YouTubeに作っている動画をアップしています。

“`xml:strings.xml

ToDoListApp
タイトル:
内容:
登録
登録しました
登録出来ませんでした

タイトルを入力してください

元記事を表示

Java Silver 未経験者による取得体験記

新卒でweb系自社開発企業より内定をいただいており、どうやらJava言語による開発をしているぞということで、先ほど取得してきました。

大学では計量経済学による実証分析を専攻していたので、開発に対しては門外漢です。
研究でR使ってました〜程度です。

使用教材や勉強方法を以下に共有します。

# 購入した教材
黒本

# 試験に向けた勉強
大学4年の春休みということで可処分時間が多く、いろいろなことに手を出していたので、少しずつ学習していました。
悪く言えばダラダラと。

## 最初の1-2週間
ほぼ「タブララサ」状態から、黒本を一周しました。
1日1-2章くらいを目安に学習。
不明点はgoogleで調べて解決。
ぜんぜんわからん状態。

## その後1ヶ月弱
その後1ヶ月弱はひたすら復習。
とはいえ、ちょうどこの時期は長編小説を読むことに拘っており、ダラダラとした学習へシフトしました。
当初は2週間での取得を目標にしていましたが、黒本に飽きてしまいガス欠。
しかし、2-3回の復習によりだんだんとJavaがわかってきた感じがしてなんとかモチベーションは維持。

この期間に巻末の実力問題

元記事を表示

[Java16]新機能Recordの詳細

# この記事について

2020/3/16にリリースされたJava16の言語仕様に関わる変更について,自分の理解を深めるのを兼ねてまとめてみます.プレビュー中の機能は含みません.

+ record (この記事)
+ [instanceof パターンマッチング](https://qiita.com/ReiTsukikazu/items/be973af7070c92bf87d5)
+ [型指定の制約について](https://qiita.com/ReiTsukikazu/items/bfac1d3bbac60915b73e)
+ [値ベースのクラスに対する警告](https://qiita.com/ReiTsukikazu/items/ddcfc8f279017e9ba186)

## 出典

+ [JEP 395: Records](https://openjdk.java.net/jeps/395)
+ [Java SE 16 言語仕様](https://docs.oracle.com/javase/specs/jls/se16/html/index.html)

# 新機能:

元記事を表示

[Android] (覚書)Jetpack NavigationとViewModelを採用した新規アプリ作成時のチートシート

Android Studio 4.1.2(windows版) での流れとなります

業務上他のプラットフォームの対応があったりでandroidの開発を継続的にできないので
ついど忘れしちゃいそうな予感のため覚書としてまとめました

Android DeveloperのJetpack Navigationの説明は以下です

https://developer.android.com/guide/navigation/navigation-getting-started?hl=ja

## 新規プロジェクト作成
新規プロジェクト作成でEmpty Activity を選択します

## navigationの作成
navigationフォルダを作成します

Android Resource Directory を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/524204/b7268791-db3c-267d-3aa5-3884e4d99981.png)
Resource type でna

元記事を表示

SpringBoot + MySQL でTodoリストを作る!CRUDの実装(Delete編)

#はじめに

前回はidに応じたTodoのbooleanの値を更新する機能を実装しました。

今回は、**「Todoの削除機能の実装」**をゴールとしています。

SpringBootを学び始めた方、復習をしたい方に向けて学んだ事を共有します。

##開発環境

“`
OS: macOS Mojave(バージョン 10.14.6)
“`

“`
$ java -version
openjdk version “11.0.2” 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
“`

“`
$ mvn -version
Maven home: /usr/local/Cellar/maven/3.6.3_1/libexec
Java version: 15.0.2, vendor: N/A, runtime: /usr/local/Cellar/openjdk/15.0.2/libexec/o

元記事を表示

[Java16]instanceofパターンマッチングとスコープ範囲

# この記事について

2020/3/16にリリースされたJava16の言語仕様に関わる変更について,自分の理解を深めるのを兼ねてまとめてみます.プレビュー中の機能は含みません.

+ [record](https://qiita.com/ReiTsukikazu/items/6dc3ec9ea9646c472db0)
+ instanceof パターンマッチング (この記事)
+ [型指定の制約について](https://qiita.com/ReiTsukikazu/items/bfac1d3bbac60915b73e)
+ [値ベースのクラスに対する警告](https://qiita.com/ReiTsukikazu/items/ddcfc8f279017e9ba186)

`instanceof`パターンマッチングは一見微妙に新しい形の構文を1つ追加しただけに思えますが,実は変数のスコープに関して複雑な仕様を含んでいて,かなり奥深いものになっています.

## 出典

+ [JEP 394: Pattern Matching for instanceof](https://o

元記事を表示

[Java16]値ベースのクラスに対する警告

# この記事について

2020/3/16にリリースされたJava16の言語仕様に関わる変更について,自分の理解を深めるのを兼ねてまとめてみます.プレビュー中の機能は含みません.

+ [record](https://qiita.com/ReiTsukikazu/items/6dc3ec9ea9646c472db0)
+ [instanceof パターンマッチング](https://qiita.com/ReiTsukikazu/items/be973af7070c92bf87d5)
+ [型指定の制約について](https://qiita.com/ReiTsukikazu/items/bfac1d3bbac60915b73e)
+ 値ベースのクラスに対する警告(この記事)

値ベースのクラスに関しては,Java16で直ちにコンパイル結果が変わったりするわけではありませんが,今後のバージョンで互換性を破壊する変更が入りそうなので,早めに警告をだすことにしたようです.

## 出典

+ [JEP 390: Warnings for Value-Based Classes](http

元記事を表示

MacでJavaを利用するときのメモ(2021年3月)

いつも何も考えずbrew install openjdkとかでインストールしていたが、いろいろ奥が(闇が)深いらしいのでメモ。

>javaをAndroid以外の開発で利用することはほとんどないので謎ワールド。

## brew install openjdk

### インストール

brewコマンドで簡単インストール。

“`bash
brew install openjdk
“`

が、どうやらkeg-onlyとうものであるため/usr/local/bin等にリンクが自動で張られない。
通常brew installすると/usr/localCellarに実体がインストールされ/usr/local/binにシンボリックリンクが設定され、PATHが通りますが、key-onlyでは実体だけのようです。

>2021年3月現在、15.0.2がインストールされるみたい。

### PATHの設定

そのため、.zshrcに

“`bash
export PATH=”/usr/local/opt/openjdk/bin:$PATH”
“`

必要に応じて

“`bash
expo

元記事を表示

Java言語について調べてみた

今回は、一番人気と言っても過言ではない言語(1991年〜現在にわたり非常に人気な言語)**「Java」**について調べてみた。

#Javaについて
・Java仮想マシン(JVM)で動くため、どのような環境でも動かすことができる。
・オブジェクト指向言語である。
・Androidアプリやゲーム開発、WebアプリやWebサイトまで万能にこなす。
・有名なゲームの「マインクラフト」もJavaで作られている。
・セキュリティ面も優れている。
・みずほ銀行や三菱UFJ銀行などのシステムを開発できるくらい優れている。

##メリット
**実行速度の速さ**。理由はJavaがコンパイラ型言語であること。
**ライブラリがとても充実している**。よって開発もしやすい。
**プラットフォームに依存しない**。これは非常に大きなメリット。
**言語として高性能**。その反面、学習難易度が高め。

 
 

##デメリット
**JVM**が入っていないパソコンだと機能しない。
**マイコン**にはJavaは組み込めない。(マイクロコンピュータの略で主に家電に使われている。)
**習得にはかなりの時間

元記事を表示

servletRequest+forward+リクエストスコープ+calcEX

中途半端初心者の忘備録

/CalcControllerからWEB-INF/jsp/firstView.jspへフォーワード

“`CalcController.java
@WebServlet(“/CalcController”)
public class CalcController extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher dsp = request.getRequestDispatcher(“WEB-INF/jsp/firstView.jsp”);
dsp.forward(request, response);
}
“`

WEB-INF/jsp/firstView.jsより/firstNu

元記事を表示

Java Silver 覚えられんやつメモ

試験6日前に、2か月前にキックオフしたプロジェクトの基本設計フェーズに突然ぶち込まれ、試験前日の土曜日の出勤が確定して勉強時間の確保ができないこと間違いなしな状態になってしまったので、今まで勉強してきて見たことあるけどイマイチ頭に入ってきてなかった部分をざっと見返せるものを作って直前に詰め込もうと思いました。

Java SE11 Silverの受験を控えている方の参考にもなれば幸いです。
(黒本のまとめ問題を参考にしている&自分用なので、順番とか整理してません。)

## String型の同値判定
– ==はインスタンスの参照が同じかどうかを判定している。
– リテラルとして記述した文字列は、基本的に使いまわされる。
– `intern`メソッドはすでにメモリ上にあるString型オブジェクトへの参照を戻す。

“`java
public class Main {
public static void main(String[] args) {
String s1 = new String(“java”); //新規オブジェクト
String s2 = “java”; /

元記事を表示

レスポンスデータを加工する(Stream)

※前回記事[レスポンスデータを加工する(拡張for文)](https://qiita.com/kilalabu/items/a1879315d292647cfcb5)のStream版です。
違いだけを知りたい人は「データを加工」までジャンプしてください。

## はじめに
レスポンスデータって全要素使うわけではなかったり、ネスト構造になってたり、結構見にくいことが多いと思います。
ということで取得したレスポンスを加工(フィルター, マッピング, ソート)して、自分好みのデータクラスを作成してみました。

## ゴール
フィルター(抽出):likeCountが5より大きいもの
マッピング(結合):title,body,likeCount,name
ソート(並び替え):likeCountで降順

|加工前|加工後|
|—-|—-|
|![スクリーンショット 2021-03-16 22.02.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670405/f5eee0bb-25e2-cbf1-add

元記事を表示

EasyBuggyでクロスサイト・スクリプティング(XSS)脆弱性を確認し、それを修正する

# 概要

[EasyBuggy](https://github.com/k-tamura/easybuggy/blob/master/README.jp.md)と[EasyBuggy Boot](https://github.com/k-tamura/easybuggy4sb/blob/master/README.jp.md)を利用して、クロスサイト・スクリプティング(XSS)脆弱性をシミュレーションし、その修正を試みます。

環境構築はこちらの記事から。

https://qiita.com/flyaway/items/4922af5dbaafa1942e88

## 注意事項

本記事では脆弱性をついた攻撃手法について解説しています。

しかし、実際に第三者が運用しているWebサービスなどに対して、勝手に脆弱性の検査をおこなうのは違法行為となる可能性が非常に高いです。無害な検査用文字列を送信しているだけのつもりであっても、意図しない破壊を招いたり、監視システムによって攻撃と勘違いされる可能性があります。

絶対にやめましょう。

参考事例: [脆弱性検査について](https:/

元記事を表示

SpringBoot + MySQL でTodoリストを作る!CRUDの実装(Update編)

#はじめに

前回はフォームを用意してTodoの新規登録機能を実装しました。

今回は、**「blooeanの値を変更してMySQLのデータを更新する」**をゴールとしています。

SpringBootを学び始めた方、復習をしたい方に向けて学んだ事を共有します。

##開発環境

“`
OS: macOS Mojave(バージョン 10.14.6)
“`

“`
$ java -version
openjdk version “11.0.2” 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
“`

“`
$ mvn -version
Maven home: /usr/local/Cellar/maven/3.6.3_1/libexec
Java version: 15.0.2, vendor: N/A, runtime: /usr/local/Cellar/openjdk/15.0.2/

元記事を表示

初心者のためのオブジェクト指向

#オブジェクト思考とは?

###いかに効率よく開発を行うかを突き詰めた考え方
例え)新入社員研修の時に御社はこういう考えのもとで働いてもらいますとういう研修を受けるようにオブジェクト指向も何かに基づいた考え方で動いています。

そしてオブジェクト指向には主に4つの考え方があります。1つ目は設計、2つ目はカプセル化、3つ目は継承、4つ目はポリーモーフィズムと言います。

#1 設計
基本的にオブジェクト指向は物と物の関係性を考えて作っていきます。このプロセスを設計と言います。この設計を効率よく無駄なくできるかがオブジェクト指向の最も重要な考え方と言えます。

#2 カプセル化
現在開発しているプログラムが他のプログラムから干渉されないようにするために基本的に決まった設計図で書いていくという考え方です。

例え)自動車の設計をしているときに横から自転車の設計図をもらっても困りますよね?このように自動車の設計をしている時は自動車関連の設計図のみでやるという考え方です。

#3 継承
一口に自動車と言ってもバスやスポーツカーやトラックなど種類は様々です。その時に自動車という基本的な設計の

元記事を表示

プログラミング初心者が基礎基本を地道に身に着ける日記(Java_ABC188編)

※本稿はAtCoderProblemsのBeginnerContest,A~C問題をJavaを用いて地道に解いていく人間の観察日記です

###目次
– まえがき
– AtCoder Beginner Contest 188に挑戦
– A問題
– B問題
– C問題
– 感想
– お世話になったサイト(参考に使用)

##まえがき
 [前回の記事(ABC194)](https://qiita.com/e2vee/items/11adc8b387290ebf0bdd)
 ふぁっきんコロナのせいでなかなか研究室仲間(主に同期)に会うことができなかったんですけども、久々に会えました。そこで、研究室仲間と一緒に問題を解いたのですが、同期のうちの一人は水色コーダーだそう。

 ..圧迫面接、開始ッ!!!

##AtCoder Begginer Contest 188に挑戦
###[A問題](https://atcoder.jp/contests/abc188/tasks/abc188_a)
“`188A.java:
import java.util.*;

pub

元記事を表示

OTHERカテゴリの最新記事