Java 我写过通用方法吗?

Java 我写过通用方法吗?,java,generics,Java,Generics,上面的语句运行下面的方法。检索在gui输入窗口中输入的数值,以及用户将微调器设置为的任何数字 submitButton.setOnAction(e -> totalPrice(Double.parseDouble(inputText.getText()), spinner.getValue())); public void totalPrice(电子输入,电子数量) { String doubleToString=String.format(“$%.2f”,输入.doubleValue(

上面的语句运行下面的方法。检索在gui输入窗口中输入的数值,以及用户将微调器设置为的任何数字

submitButton.setOnAction(e -> totalPrice(Double.parseDouble(inputText.getText()), spinner.getValue()));
public void totalPrice(电子输入,电子数量)
{
String doubleToString=String.format(“$%.2f”,输入.doubleValue()*数量.doubleValue());
outputText.setText(doubleToString);
}
上面的方法获取操作的输入并将其转换为字符串。outputText是在gui中显示结果的文本字段,设置为字符串。它是有效的

我的问题其实很简单


我写的是真正的泛型吗?分配指定必须使用泛型,第一次,我的代码工作了,但我很快意识到没有使用泛型。我想我第二次拿到了,但我可能大错特错了。我需要做些改变吗?任何糟糕的代码?

其他人已经在他们的评论中回答了这个问题;只是给你一点解释,为什么这是一个通用的方法

由于您不确定该方法是否为泛型,下面是泛型的定义(摘自):

如果方法声明了一个或多个类型变量(§4.4),则该方法是泛型的

这些类型变量称为方法的类型参数。泛型方法的类型参数部分的形式与泛型类的类型参数部分相同(§8.1.2)

泛型方法声明定义了一组方法,每个方法用于按类型参数调用类型参数节。当调用泛型方法时,可能不需要显式提供类型参数,因为它们通常可以推断出来(§18(类型推断))

这里的
type参数是
E
,它表示所有可能的数字类型(短、整数、长、浮点、双精度等)。如果您必须在没有泛型的情况下实现需求,那么您将编写大量使用这些不同参数的方法(因此
方法集
)。现在您只有一个通用方法,它接受所有可能的数字作为参数

这里也是通用方法的官方版本

尽管要求中没有明确说明,但我将修改该方法,如下所示:

public <E extends Number> void totalPrice(E input, E quantity)
{
    String doubleToString = String.format("$%.2f", input.doubleValue() * quantity.doubleValue());

    outputText.setText(doubleToString);
}
public void totalPrice(电子输入,整数数量){
String doubleToString=String.format(“$%.2f”,输入.doubleValue()*数量);
outputText.setText(doubleToString);
}
如您所见,我将第二个参数从
E
更改为
int
。原因是
quantity
不是int没有意义。但您可以将其保留为
E
(因为:用户将微调器设置为任何数字)


因此,正如其他人在他们的评论中已经提到的,这是语法上有效的泛型方法。

是的,您编写了一个真正的泛型方法。祝贺嗯,从语法正确的意义上说这是真的。你可能想问你的导师这是否真的是你所要求的。因为你可以简单地用
Number
替换
E
,我觉得这不是一个很好的例子。@markspace你能详细说明一下吗?我确实尝试将E改为数字,但由于.doubleValue()不再工作,我无法将输入乘以数量,因此导致方法内部出现错误。这是一种通用方法,无需担心……据我所知,是的,这完全没有意义。
public <E extends Number> void totalPrice(E input, int quantity) {
    String doubleToString = String.format("$%.2f", input.doubleValue() * quantity);
    outputText.setText(doubleToString);
}