SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
絶対にぬるぽを出さない
We never throw NPE
JJUG CCC 2016 Spring 懇親会LT
@yy_yank
          こいつです
          ・vimmer
          ・サクラエディタicon
          ・小物SIer
          ・JavaとKotlinが好き
ヤンク(@yy_yank)
自己紹介
  ネタ枠
joke LT
大人な
Javaユーザーの皆
様においては
LT中に
それ◯◯でしょ?
とか先に答えを
言ってはいけない
ぬるぽ
NullPointerException
「ぬるぽ
出すなよ!絶対だぞ!絶
対ぬるぽ出すなよ」
そっか
ならば
出さなければ良い
・持たず
・作らず
・持ち込まず
非ぬるぽ3原則
・持たず
・作らず
・持ち込まず
非ぬるぽ3原則
その1 持たず
非ぬるぽ3原則 〜持たず〜
・NullPointerExceptionというクラスがなければそ
もそもそんな例外は発生しない
・なるほどclassファイルが無ければ良いんや
・NullPointerExceptionというクラスがなければそ
もそもそんな例外は発生しない
_人人人人人人人人人人人人人人人人_
> 突然のClassNotFoundException <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
非ぬるぽ3原則 〜持たず〜
その1 持たず
失敗
・持たず
・作らず
・持ち込まず
非ぬるぽ3原則
その2 作らず
非ぬるぽ3原則 〜作らず〜
・NullPointerExceptionというクラスのインスタン
スが生成されなければ
そもそもそんな例外は発生しない
非ぬるぽ3原則 〜作らず〜
・java.lang.reflect.Proxyはきびしー
・ならばNullPointerExceptionクラスをバイトコー
ドエンハンス・・・・・!!!
非ぬるぽ3原則 〜作らず〜
・java.lang.reflect.Proxyはきびしー
・NullPointerExceptionクラスをバイトコードエン
ハンスしてコンスタラクタをアレすれば
・・・・・!!!
・そこでjavassist
いや無理
・javassistはjava.langパッケージのクラスのバイト
コードをいじることは出来ない
・多分JVM起動時にすでにロードされてしまうから
非ぬるぽ3原則 〜作らず〜
ならば力技だ
非ぬるぽ3原則 〜作らず〜
public static void main(String... args) {
Thread.setDefaultUncaughtExceptionHandler(
(t, e) -> System.out.println(“ぬるぽなんてな
かった”));
}
・・だめですか???
ですよねー
(握りつぶしだもんね)
public class NullPointerException extends
RuntimeException {
public NullPointerException() {
System.exit(0);
}
}
非ぬるぽ3原則 〜作らず〜
javac NullPointerException.java
jar -xvf rt.jar java/lang
copy NullPointerException.class
java/lang/NullPointerException.class
jar -uf rt.jar
非ぬるぽ3原則 〜作らず〜
javac NullPointerException.java
jar -xvf rt.jar java/lang
copy NullPointerException.class
java/lang/NullPointerException.class
jar -uf rt.jar
こいつをjdkに仕込めば…!!
非ぬるぽ3原則 〜作らず〜
public static void main(String... args) {
throw new NullPointerException();
// しかし何も起こらなかった!!!
}
非ぬるぽ3原則 〜作らず〜
めでたしめでたし
いや違う
(プロセス終了しちゃう)
その2 作らず
失敗
・持たず
・作らず
・持ち込まず
非ぬるぽ3原則
・ぬるぽは絶対に出るわ!当たり前やろ!
プログラマが持ち込まないほかない
・飽くなきテスト
・@NotNull @Nullableとか
・チェック制約
・バリデーション
・java.util.Optional
・Kotlin
非ぬるぽ3原則 〜持ち込まず〜
絶対ぬるぽを発生させな
いのはあなたたちです!
おしまい

Más contenido relacionado

Destacado

Destacado (11)

Местная и региональная авиация
Местная и региональная авиацияМестная и региональная авиация
Местная и региональная авиация
 
Django introduction
Django introductionDjango introduction
Django introduction
 
เรื่องเกี่ยวกับ โรงเรียนวิชาชีพ ในญี่ปุ่น
เรื่องเกี่ยวกับ โรงเรียนวิชาชีพ ในญี่ปุ่นเรื่องเกี่ยวกับ โรงเรียนวิชาชีพ ในญี่ปุ่น
เรื่องเกี่ยวกับ โรงเรียนวิชาชีพ ในญี่ปุ่น
 
Cyclopark website re-launch
Cyclopark website re-launchCyclopark website re-launch
Cyclopark website re-launch
 
Marketing plan
Marketing planMarketing plan
Marketing plan
 
Zelula amak-zuzenketak.ppt
Zelula amak-zuzenketak.pptZelula amak-zuzenketak.ppt
Zelula amak-zuzenketak.ppt
 
Day 4 Recap at #CannesLions 2013 / #OgilvyCannes
Day 4 Recap at #CannesLions 2013 / #OgilvyCannesDay 4 Recap at #CannesLions 2013 / #OgilvyCannes
Day 4 Recap at #CannesLions 2013 / #OgilvyCannes
 
Economia
EconomiaEconomia
Economia
 
Comportamiento de compra del consumidor
Comportamiento de compra del consumidorComportamiento de compra del consumidor
Comportamiento de compra del consumidor
 
Rocking SEO for WP - #WCLV2015
Rocking SEO for WP - #WCLV2015Rocking SEO for WP - #WCLV2015
Rocking SEO for WP - #WCLV2015
 
Irena Sendler
Irena SendlerIrena Sendler
Irena Sendler
 

Más de yy yank

Más de yy yank (10)

Javaプログラマのための頑張らないGo入門
Javaプログラマのための頑張らないGo入門Javaプログラマのための頑張らないGo入門
Javaプログラマのための頑張らないGo入門
 
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
 
Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係
 
KuromojiをKotlinで動かす
KuromojiをKotlinで動かすKuromojiをKotlinで動かす
KuromojiをKotlinで動かす
 
Doma2 with Kotlin
Doma2 with KotlinDoma2 with Kotlin
Doma2 with Kotlin
 
Kotlinこんなん出ましたけど
Kotlinこんなん出ましたけどKotlinこんなん出ましたけど
Kotlinこんなん出ましたけど
 
Kotlinあるある言いたい
Kotlinあるある言いたいKotlinあるある言いたい
Kotlinあるある言いたい
 
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション
 
Kotlinメジャーver リリースを前に
Kotlinメジャーver リリースを前にKotlinメジャーver リリースを前に
Kotlinメジャーver リリースを前に
 
Server Side Kotlin
Server Side KotlinServer Side Kotlin
Server Side Kotlin
 

絶対にぬるぽを出さない