[英]actual argument cannot be converted by method invocation conversion
將char
添加到作為final ConcurrentLinkedQueue<Character>
參數的charQueue
的正確方法是什么?
Oracle似乎說它應該工作:
從char類型到Character類型
http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.7
碼:
package telnet;
import static java.lang.System.out;
import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.logging.Logger;
public class InputStreamWorker {
private final static Logger LOG = Logger.getLogger(InputStreamWorker.class.getName());
public InputStreamWorker() {
}
public void print(final InputStream inputStream, final ConcurrentLinkedQueue<Character> charQueue) {
Thread print = new Thread() {
StringBuilder sb = new StringBuilder();
@Override
public void run() {
try {
char ch = (char) inputStream.read();
sb.append(ch);
while (255 > ch && ch >= 0) {
charQueue.add(ch);
ch = (char) inputStream.read();
System.out.print(ch);
}
} catch (IOException ex) {
out.println("cannot read inputStream:\t" + ex);
}
}
};
print.start();
}
}
從構建結果中提取:
-do-compile:
[mkdir] Created dir: /home/thufir/NetBeansProjects/TelnetConsole/build/empty
[mkdir] Created dir: /home/thufir/NetBeansProjects/TelnetConsole/build/generated-sources/ap-source-output
[javac] Compiling 11 source files to /home/thufir/NetBeansProjects/TelnetConsole/build/classes
[javac] /home/thufir/NetBeansProjects/TelnetConsole/src/telnet/InputStreamWorker.java:28: error: no suitable method found for add(char)
[javac] charQueue.add(ch);
[javac] ^
[javac] method ConcurrentLinkedQueue.add(Character) is not applicable
[javac] (actual argument char cannot be converted to Character by method invocation conversion)
[javac] Note: Some input files use unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
[javac] 1 error
沒錯,它應該可以正常工作,因為方法調用轉換允許從char
到Character
裝箱轉換。 您的代碼在我的機器上可以正常編譯,因此我懷疑是NetBean特定的問題。
同時,您可以顯式地從char
轉換為Character
以使編譯器滿意。 這應該可以解決問題:
char ch = Character.valueOf(inputStream.read());
問題是我自己創造的。 在同一個程序包中,是一個Character
類,該類現在正在創建明顯的命名沖突。
將類重命名為MyCharacter
並檢查Queue使用的Character
是否已修復該錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.