Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Server-Side Kotlinで必要なJavaの知識

Server-Side Kotlinで必要なJavaの知識

2021年5月12日(水) 「Server-Side Kotlin Study #1」の登壇資料です。

Takehata Naoto

May 12, 2021
Tweet

More Decks by Takehata Naoto

Other Decks in Programming

Transcript

  1. 概要 竹端 尚人 フリーランスエンジニア Twitter: @n_takehata 職種: バックエンドエンジニア 好きな言語:Kotlin Server-Side

    Kotlin 、Java 、etc… ( 少し前まで) スマートフォンゲーム開発 昨年12 月からフリーランスに
  2. 登壇、執筆など CEDEC2018 、2019 登壇 Software Design 2019 年2 〜4 月号で短期連

    載 書籍「 Kotlin サーバーサイドプログラミング 実践開発」を2021 年4 月に発売
  3. Spring Boot のアノテーション @RestController @RequestMapping("greeter") class GreeterController( private val greeter:

    Greeter ) { @GetMapping("/hello") fun hello(@RequestParam("name") name: String): HelloResponse { return HelloResponse("Hello ${name}") } }
  4. Spring Security のインターフェース実装 class MyAuthenticationFailureHandler : AuthenticationFailureHandler { override fun

    onAuthenticationFailure( request: HttpServletRequest, response: HttpServletResponse, exception: AuthenticationException ) { response.status = HttpServletResponse.SC_UNAUTHORIZED } }
  5. Kotlin からJava のライブラリ呼び出し fun main() { val uuid = UUID.randomUUID()

    println(uuid.toString()) val now = LocalDateTime.now() println(now) }
  6. gRPC の実装 @RestController class GreeterClientController { @GetMapping("/greeter/hello/{name}") fun hello(@PathVariable name:

    String): String = runBlocking { val channel = ManagedChannelBuilder.forAddress(HOST, PORT) .usePlaintext() .build() val request = HelloRequest.newBuilder().setName(name).build() val stub = GreeterGrpcKt.GreeterCoroutineStub(channel) val response = async { stub.hello(request) } response.await().text } }
  7. 生成されたコード public final class HelloRequest extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:example.greeter.HelloRequest)

    HelloRequestOrBuilder { // ・・・ public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } // ・・・ public Builder setName( java.lang.String value) { if (value == null) { throw new NullPointerException(); // ・・・
  8. SAM 変換 fun main() { val function = CalcJava {

    num1, num2 -> num1 + num2 } println(function.calc(1, 3)) } @FunctionalInterface public interface CalcJava { Integer calc(Integer num1, Integer num2); } Java の何を呼んでいるかの理解が必要 ( 今はKotlin 同士でも使えるようになったのでJava 独自のものではないが)