問題タブ [java-interop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 静的ウィンドウ ライブラリを dll に変換する
ライブラリに多数の静的ファイルが含まれており、 (JAVA コードから「dll」を動的に呼び出すことができる Java ライブラリ)*lib
からそれらにアクセスしたいので、魔法のように静的ライブラリを dll に変更する方法はありますか?JNA
コードは Visual Studio を使用してコンパイルされており (関連があることを願っています)、適切なヘッダー ファイルもあります。
私はソース コードにアクセスできません。また、無料の (ビールのような) ツールのみを使用して実行したいと考えています。
clojure - Clojure で Java クラスを拡張し、そのクラスのメソッドと同じ名前のメソッドを定義すると、何が起こるでしょうか?
私はプログラミング Clojure を読んでいますが、Stuart の主な Java Interop の例を理解するのに苦労しています。彼は DefaultHandler を拡張し、startElement メソッドを作成してから、そのハンドラーを XML パーサーに渡します。私が理解していないのは、正確に何が起こっているのかです。彼の startElement の実装は、DefaultHandler で定義されたものをオーバーライドしますか? よくわかりません。私は Java の経験がなく、オブジェクト指向の経験もほとんどありません。
ありがとう!
import - Clojure には Java の import package.* に相当するものがありますか?
または、インポートするすべてのクラスを具体的に列挙する必要がありますか?
私は今Clojureを学んでいます.REPLで次のようなことができると便利です:
これは有効な構文ではありませんが、同等の機能を備えていると便利です。特にいじくり回しているときに、タイピングを節約できます。実際の製品コードでは、言語に関係なく、インポートする各クラスを常に列挙しますが、そうする必要がないのは非常に便利です。
clojure - Java クラスから Clojure 名前空間に `static final` 定数をプルするにはどうすればよいですか?
Clojure バインディングで Java ライブラリをラップしようとしています。Java ライブラリの 1 つの特定のクラスは、静的な最終定数の束を定義します。次に例を示します。
def
クラスを調べて、これらの定数をそれぞれ明示的に -ing せずに Clojure 名前空間に取り込むことができるのではないかと考えました。
たとえば、次のように明示的に接続する代わりに、次のようにします。
モジュールが読み込まれると、クラスを調べてFoo
動的に接続しfoo-bar
、foo-some-constant
Clojure 名前空間に入れることができます。
これを行う理由は 2 つあります。
Foo
A)クラスに追加された新しい定数を自動的に取り込みます。言い換えれば、Java インターフェースが新しい定数を追加した場合、Clojure ラッパーを変更する必要はありません。
B)定数がよりClojure風の命名規則に従うことを保証できます
私はこれを行うことに自信があるわけではありませんが、Clojure/Java の相互運用に関する知識を広げるために尋ねるのは良い質問のようです。
ありがとう
servlets - サーブレットインターフェイスを実装するclojureタイプを定義するにはどうすればよいですか?
(最先端のclojure 1.2ブランチからの)deftypeを使用して、Javaサーブレットインターフェイスを実装するJavaクラスを作成しようとしています。以下のコードがコンパイルされることを期待します(あまり有用ではありませんが)。
しかし、それはコンパイルされません。コンパイラは次のメッセージを生成します。
私はnilを返すので、これは私には意味がありません。したがって、メソッドの戻り型がvoidであるという事実は問題にはなりません。たとえば、java.util.Setインターフェイスの場合:
問題なくコンパイルされます。
では、サーブレットインターフェイスで何が間違っているのでしょうか。
明確にするために:典型的なケースは、このインターフェースを直接実装するのではなく、サーブレット抽象クラスの1つをサブクラス化することですが、それでもこれを行うことは可能です。
スタックトレース:
(deftypeサーブレット...のスタックトレースは次のとおりです。
.net - JavaDateを.NETDateTimeに変換する.NETのMPXJ
MS Project(MPP)ファイルの解析に.NETのMPXJライブラリを使用していますが、うまく機能しています。私が抱えている問題の1つは、タスクの開始日と終了日をデータモデルで使用するために.NETDateTimeに変換しようとしていることです。
私はすべてのタスクを実行し、両方ともjavva.util.Dateオブジェクトを返すtask.getFinish()とtask.getStart()を呼び出しています。
task.getFinish()。getYear()、task.getFinish()。getMonth()などを使用して新しいDateTimeオブジェクトを作成すると、それらが廃止されたことを警告します。
MPXJから.NETDateTimeオブジェクトに開始日と終了日を取得するための最良の方法は何ですか?
ありがとう。
clojure - Clojure の :gen-class と double 配列
Double の 2D 配列を入力として取る fn を :gen-class しようとしています。同様のトピックに関する投稿と解決策をここで既に見ましたが、まだ実用的な解決策を作成できません。
入力に"[[D"
基づいて使用type
します。これは .class ファイルにうまくコンパイルされます。
ここで、別の .clj ファイルに移動すると、次のようになります。
repl から呼び出すとbar
、次のエラーが表示されます。
java.lang.IllegalArgumentException: 一致するフィールドが見つかりません: クラス [[D の heat_map2
何かご意見は?
scala - Scala から Java を呼び出す: 保護されたコンストラクター
これは、Scala 2.8.0 final でエラーなしでコンパイルされます。
ただし、実行すると次のようになります。
これはバグ、機能、または既知の制限ですか?
java - ClojureでプリミティブJavaタイプをどのように参照しますか?
リフレクションを使用して、ClojureからJavaオブジェクトのメソッドを取得したいと思います。引数の型の1つはJavaプリミティブであり、Clojureからそれらを参照する方法がわかりません。
たとえば、取得したいとしますString.valueOf(boolean)
。私の最も近い推測はすることです
Boolean
ただし、これはプリミティブ型自体ではなく、ボックス化されたバージョンであるため失敗します。試しましたがboolean
、これは組み込みのClojure関数を参照しており、bool
未定義です。
ClojureでプリミティブJavaタイプを参照するにはどうすればよいですか?
clojure - deftypeで作成されたクラスにコンストラクターを追加します
Javaとの相互運用性のために、初期化を実行するnullaryコンストラクターを持つクラスが必要です。このクラスのオブジェクトは、可変のJavaフィールドに似たものを持っている必要があります(つまり、オブジェクトはゲームのバックエンドを表し、ゲームの状態を維持する必要があります)。
deftypeは、nullaryコンストラクターを提供することを除いて、私がやりたいことをすべて実行します(フィールドを持つクラスを作成しているため)。
フィールドを公に読めるようにする必要はないので、次の4つの解決策を考えることができます。
gen-classを使用します。私はそれを避けることができればこれをしたくありません。
どういうわけか、deftypeの知識の外でプライベートメンバー変数をエンコードします。これはできないと言われました。
nullaryコンストラクターも作成する変更されたdeftypeを記述します。率直に言って、私はこれに十分なclojureを知りません。
deftypeによって作成されたクラスを取得し、それに新しいコンストラクターを追加します。
この最後に、Javaクラスが必要です。これは、クラスから新しいオブジェクトを作成するJavaコードにそれを渡すためです。
gen-classを使用する以外に、私が提案した(または私が考えていなかった)解決策は実行可能ですか?