submitButton.setOnAction(e -> totalPrice(Double.parseDouble(inputText.getText()), spinner.getValue()));
以上语句运行以下方法。检索在gui输入窗口中输入的数值,以及用户设置微调器的数字。
public <E extends Number> void totalPrice(E input, E quantity)
{
String doubleToString = String.format("$%.2f", input.doubleValue() * quantity.doubleValue());
outputText.setText(doubleToString);
}
上述方法接受动作的输入并将其转换为字符串。 outputText,即在gui中显示结果的文本字段,设置为字符串。它有效。
我的问题其实很简单。
我写的是真正的通用名吗?赋值指定必须使用泛型,并且第一次,我的代码工作但我很快意识到没有使用泛型。我想我第二次得到它但我可能是非常错的。我需要做出改变吗?任何糟糕的代码?
答案 0 :(得分:1)
其他人已经在评论中回答了这个问题;只是为了给你一些解释,为什么这是一个通用的方法。
由于您不确定该方法是否为泛型,因此以下是泛型的定义(来自Java Language Specification的摘录):
如果方法声明了一个或多个类型变量(§4.4),则该方法是通用的。
这些类型变量称为方法的类型参数。泛型方法的类型参数部分的形式与泛型类的类型参数部分(第8.1.2节)相同。
泛型方法声明定义了一组方法,每个方法都可以通过类型参数调用类型参数部分。调用泛型方法时,可能不需要显式提供类型参数,因为它们通常可以推断出来(§18(类型推断))。
type parameter
这里是E
,它代表所有可能的数字类型(short,int,long,float,double,...)。如果您必须在没有泛型的情况下实现该要求,那么您将使用这些不同的参数编写许多方法(因此set of methods
)。现在,您只有一个通用方法接受所有可能的数字作为参数。
以下是关于通用方法的官方Java Tutorial。
即使从要求中不清楚,我也会修改方法如下:
public <E extends Number> void totalPrice(E input, int quantity) {
String doubleToString = String.format("$%.2f", input.doubleValue() * quantity);
outputText.setText(doubleToString);
}
如您所见,我将第二个参数从E
更改为int
。原因是quantity
不是int是没有意义的。但您可以将其保留为E
(因为:用户将微调器设置为的任何数字)
因此,正如其他人在评论中已经提到的那样,这是一种语法上有效的通用方法。