私はClojureを初めて使用しており、ClojureへのJavaインターフェイスを実装しようとしています。具体的には、このコードプロキシを使用したClojureへのJavaインターフェイス
import javax.print.*;
class Test {
public static void main (String [] args)
{
PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
System.out.println("Number of print services: " + printServices.length);
for (PrintService printer : printServices)
System.out.println("Printer: " + printer.getName());
}
}
PrintService
インターフェイスとPrintServiceLookup
constaructorクラスです。私はreifyとプロキシを使用する方法について混乱しています。私の目標は、システムにインストールされているプリンタを入手することです。 reifyやプロキシの使い方の例を説明できる人はいますか?ドキュメンテーションから、インタフェースをロードしてから使用したいメソッドをロードする必要があることを理解していますが、動作させることはできません。 私はそれを理解するJavaの観点から、PrintServiceLookup.lookupPrintServices()
からオブジェクトを取得し、getName
関数をPrintService
インターフェイスから適用し、それを印刷する必要があります。 私はかなり確信している
(defn print-serv []
(let [printS (proxy [PrintService PrintServiceLookup] []
(getName [])
(lookupPrintServices [])
)]
(.println (System/out) (.getName printSe))
)
)
今まで私の試みは間違ってすべての方法ですが、私は誰もが、私は感謝されるより良い私にそれをexpainことができれば本当に、およびプロキシ作業を具体化する方法を理解することはできません!
あなたは正しいと思いました。ありがとうございました!!しかし、実際には何が起こっているのですか? – narocath
@narocath Np。嬉しいことに、 '^ PrintService'(' 'PrintService p、printers '')タイプヒントはオプションです。コンパイラに 'p'が' PrintService'であることを伝えるだけです。私は通常、interopを使用する際にはヒントを含みますが、オプションであってもタイプヒントを含めるのでIDEがより良い自動補完推測を行い、ヒントをスキップするとIDEが '.getName'を解決できないという警告を表示することがあり、実行時に反映が必要になります。 – Carcigenicate
もう1つの質問があります。インターフェイスをロードする必要があります。この特定のケースでは、インターフェイスをロードするのは正しいでしょうか。インターフェイス全体を実装する必要があるときや、静的メソッドを呼び出す必要があるときはわかりません。 – narocath