私はチャットクライアント/サーバーを作成しています。ソケットを取得し、ソケットに書き込むために使用できるclojure.core.async /チャンネルを戻すコードを持っています。もっと簡単に。Clojureはリフレクション警告デンプサイト型のヒントを与えます
私の問題は、タイプヒントがあるにもかかわらず、.write
への呼び出しを解決できないという反射の警告が表示されることです。
(ns chat.main
(:require [clojure.core.async :as a :refer [>! >!! <! <!! go thread chan]])
(:import [java.net Socket ServerSocket]
[java.io InputStream BufferedReader InputStreamReader OutputStream BufferedOutputStream PrintWriter]))
(set! *warn-on-reflection* true)
(defn new-output-chan [^Socket sock]
(let [^OutputStream out (.getOutputStream sock)
^PrintWriter p-out (PrintWriter. out)
out-chan (chan)]
(go
(while (.isConnected sock)
(let [^String message (<! out-chan)]
(.write p-out message) ; <---------- Here
(.flush p-out)))
(a/close! out-chan))
out-chan))
は与える:
Reflection warning, C:\Users\slomi\IdeaProjects\chat\src\chat\main.clj:44:5 - call to method write on java.io.PrintWriter can't be resolved (argument types: unknown).
私はかかわらず、それがどんな明確にすることができるかわかりません。 p-out
とmessage
の両方が明示的に示唆されています。不思議なことに、flush
への電話は問題ありません。
どうすれば解決できますか?
ああ!それも考えなかった。いいキャッチ!それはその後しなければならないでしょう。ありがとう。 – Carcigenicate