【发布时间】:2017-04-22 18:18:40
【问题描述】:
我正在编写一个聊天客户端/服务器,并且具有以下代码,该代码接受一个套接字,并返回一个 clojure.core.async/channel 可用于更轻松地写入套接字。
我的问题是,尽管有类型提示,但我仍然收到反射警告,指出无法解决对 .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 没问题。
我该如何解决这个问题?
【问题讨论】:
标签: clojure type-hinting