繁体   English   中英

类似于Java的方法:public static <F extends Field<F> &gt; DenseVector <F> valueOf(F ... elements)...它们是什么?

[英]Java methods that look like: public static <F extends Field<F>> DenseVector<F> valueOf(F… elements)…what are they?

因此,我正在浏览一个Java库(JScience),之后有人在这里向我指出要在Java中获取Vector(数学的)。

不幸的是,我从来没有见过像这样的生活:

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

作为一种方法,您可以在DenseVector类中调用。 那有什么意思。 它是否返回“ <F extends Field<F>> ”(如果是,为什么Eclipse认为它是输入?)

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

这真的让我感到困惑。 我不能创建一个new DenseVector()因为只有超类才具有它,并且它受到保护,并且尝试执行DenseVector.valueOf()显然仅在我给出它的情况下才有效...那个...奇怪的东西作为输入。

我见过人们在尝试实例化对象(或类似对象)时不得不实例化方法……是那样的对象(或那样的对象?))API试图让我做什么?

我在学校里学过Java(虽然在Java中除了使用Java之外还使用了很多其他不同的东西),但在学校学习过Java却感到有点困惑,而且从未遇到过这样的事情。 这是为了什么? 试图让我做什么? 这是新的吗? 旧? 朦胧?

-珍妮

您应该能够调用此方法来创建矢量,如下所示:

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

在此示例中,类型参数FReal Real遵循“ extends Field<F> ”的约束,因为它实现了Field<Real>

对于不同的应用程序,可能会使用不同的字段 例如,安全应用程序可能使用ModuloInteger字段。 这有点令人困惑,因为这是一个数学领域,而不是像物理学家所说的“矢量领域”。

通过使用类型变量,此库有助于确保您在给定字段内执行所有操作。 例如,给定v像上面一样声明为DenseVector<Real> ,如果您尝试将其乘以Complex ,编译器将抱怨。

这是一个通用的返回类型。 请参阅此处以获取有关Java泛型的教程。

这些称为通用类型。 它们已经在Java 5中添加,并且类似于C ++模板。

这个想法是您定义特定类型而不是一般类型的项目的集合。

这可以帮助您避免频繁下垂。 在较早的Java代码中,假设您知道向量将仅包含X。 从该集合中检索项目后,您将只获得Object,并且必须显式下调它。

这也是更安全的,因为您不能将Ys放入Xs的向量中,并且出于相同的原因更容易阅读。

这些括号中“扩展”背后的故事是,您可以定义“ 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的方法,其中参数为零或多个Fs。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM