Les méthodes Java qui ressemblent à: public statique < F étend le champ < F > > DenseVector < F > valueOf (F… éléments)… quels sont-ils?

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

  •  06-07-2019
  •  | 
  •  

Question

Je cherche donc dans une bibliothèque Java (JScience) après que quelqu'un ici m'a intentionnellement dirigé vers elle pour obtenir des vecteurs (c'est-à-dire des mathématiques) en java.

Malheureusement, je n'ai encore jamais rien vu de ma vie, par exemple:

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

En tant que méthode, vous pouvez appeler la classe DenseVector. Qu'est ce que ça veut dire. Renvoie-t-il un & <; code> < F etend le champ < F > > " (Et si oui, pourquoi Eclipse pense-t-il que c'est une entrée?)

http: // jscience .org / api / org / jscience / mathématiques / vectoriel / DenseVector.html # valueOf (F ...)

Cela me trouble vraiment. Je ne peux pas créer de nouveau DenseVector () car seule la super-classe le possède et il est protégé. En essayant de faire DenseVector.valueOf () , cela ne fonctionne apparemment que si je donnez-lui ... cette ... chose étrange comme entrée

J'ai vu des personnes devoir instancier des méthodes lorsqu'elles essayaient d'instancier des objets (ou quelque chose du genre) ... c'est comme ça (ou EST-ce que c'est?)) Qu'est-ce que l'API essaie de me faire faire? / p>

Je suis un peu confus d’avoir appris le java à l’école (et de l’utiliser un peu au travail, même si nous utilisons beaucoup de choses différentes en plus du java), sans jamais rien trouver de tel. C'est pour quoi? Qu'est-ce qu'il essaie de me faire faire? Est-ce nouveau? Vieux? Obscur?

-Jenny

Était-ce utile?

La solution

Vous devriez pouvoir appeler cette méthode pour créer un vecteur, comme ceci:

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

Dans cet exemple, l'argument de type F est Real . Real respecte la contrainte " s'étend dans le champ < F > ". car il implémente Field < Real > .

Pour différentes applications, différents champs sont susceptibles d'être utilisés. Par exemple, les applications de sécurité peuvent utiliser le champ ModuloInteger . C'est un peu déroutant car il s'agit d'un champ mathématique et non d'un "champ de vecteurs". comme on en parle en physique.

En utilisant des variables de type, cette bibliothèque vous permet de vous assurer que vous effectuez toutes les opérations dans un champ donné. Par exemple, si v est déclaré comme DenseVector < Real > comme ci-dessus, le compilateur se plaindra si vous essayez de le multiplier par un nombre Complex . .

Autres conseils

C'est un type de retour générique. Voir ici pour un didacticiel sur les génériques Java.

Ils sont appelés types génériques. Ils ont été ajoutés à Java 5 et sont similaires aux modèles C ++.

L'idée est que vous définissiez une collection d'éléments d'un type particulier plutôt que quelque chose de général.

Cela vous aide à éviter les baisses fréquentes. Dans du code Java plus ancien, supposons que vous saviez que votre vecteur ne contiendrait que des X. Une fois que vous avez extrait des éléments de cette collection, vous n’obtenez que l’objet et vous devez explicitement le réduire.

C’est aussi plus sûr car vous ne pouvez pas mettre Ys dans un vecteur de X et plus clair à lire pour les mêmes raisons.

L’histoire derrière les " étend " Dans ces parenthèses, vous pouvez définir des collections de "X et de tous leurs sous-types". cela accepterait toujours les sous-types de X mais rejetterait Y.

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

Permet de décomposer ceci:

public static

C'est une méthode statique publique.

<F extends Field<F>>

C'est une méthode générique pour toute classe F où F est une extension du champ

DenseVector<F>

Il retourne un DenseVector (générique) pour F

valueOf(F... elements)

Une méthode nommée valueOf où les paramètres sont égaux à zéro ou plus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top