次のようなJavaメソッド:public static< F extends Field< F>> DenseVector< F> valueOf(F… elements)…それらは何ですか?

StackOverflow https://stackoverflow.com/questions/1633211

  •  06-07-2019
  •  | 
  •  

質問

だから、JavaでVector(つまり数学的なもの)を取得するためにここに誰かが私にそれを指摘した後、私はJavaライブラリ(JScience)を調べています。

残念ながら、次のように人生で何も見たことがありません:

public static <F extends Field<F>> DenseVector<F> valueOf(F... elements)

DenseVectorクラスで呼び出すことができるメソッドとして。それは一体何の意味ですか。 &quot; &lt; F extends Field&lt; F&gt;&gt; &quot; (もしそうなら、なぜEclipseはそれが入力だと思うのですか?)

http:// jscience .org / api / org / jscience / mathematics / vector / DenseVector.html#valueOf(F ...)

本当に混乱しています。 新しいDenseVector()を作成することはできません。スーパークラスのみがそれを持ち、保護されているためです。 DenseVector.valueOf()を実行しようとすると、明らかにそれを...それ...入力として奇妙なもの。

オブジェクト(またはそのようなもの)をインスタンス化するときにメソッドをインスタンス化する必要がある人々を見てきました...それはそのようなものですか(またはそれですか?))APIが私に何をさせようとしているのですか?

私は学校でJavaを学んだ(そして、Javaだけでなく多くのDiffernetを使用しているが、仕事で少し使用した)ので、このようなことは一度もなかったので、ちょっと混乱しています。何のために?私に何をさせようとしているのですか?新しいですか?古い?あいまいですか?

-ジェニー

役に立ちましたか?

解決

次のように、このメソッドを呼び出してベクターを作成できるはずです:

Real r1 = Real.ONE, r2 = Real.valueOf(2D), r3 = Real.ZERO;
DenseVector<Real> v = valueOf(r1, r2, r3);

この例では、型引数 F Real です。 Real は制約に従います&quot; extends Field&lt; F&gt; &quot; Field&lt; Real&gt; を実装しているためです。

異なるアプリケーションでは、異なるフィールドが使用される可能性があります。たとえば、セキュリティアプリケーションは ModuloInteger フィールドを使用する場合があります。これは数学的なフィールドであり、「ベクトルフィールド」ではないため、少し混乱します。物理学の話のように。

このライブラリは、型変数を使用することで、特定のフィールド内ですべての操作を確実に実行するのに役立ちます。たとえば、上記のように denseVector&lt; Real&gt; として宣言された v が与えられた場合、 Complex 数で乗算しようとするとコンパイラは文句を言います。 。

他のヒント

これは一般的な戻り型です。 Java Genericsのチュートリアルについては、こちらをご覧ください。

これらはジェネリック型と呼ばれます。 Java 5で追加されており、C ++テンプレートに似ています。

アイデアは、一般的なものではなく、特定のタイプのアイテムのコレクションを定義することです。

これは、頻繁なダウンキャストを回避するのに役立ちます。古いJavaコードで、ベクトルにXのみが含まれることがわかっていると仮定します。そのコレクションからアイテムを取得したら、オブジェクトを取得するだけで、明示的にダウンキャストする必要がありました。

YをXのベクトルに入れることができないため、より安全であり、同じ理由で読みやすくなります。

「拡張」の背後にある物語これらの括弧で囲まれているのは、「Xとそのすべてのサブタイプ」のコレクションを定義できることです。 Xのサブタイプは受け入れますが、Yは拒否します。

public static <F extends Field<F>> DenseVector<F> valueOf(F... elements)

これを分解します:

public static

これはパブリックな静的メソッドです。

<F extends Field<F>>

任意のクラスFの汎用メソッドで、FはFieldの拡張です

DenseVector<F>

Fの(汎用)DenseVectorを返します

valueOf(F... elements)

valueOfという名前のメソッド。パラメーターは0個以上のFです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top