Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否应该用泛型接口替换文本_Java_Design Patterns_Literals - Fatal编程技术网

Java 是否应该用泛型接口替换文本

Java 是否应该用泛型接口替换文本,java,design-patterns,literals,Java,Design Patterns,Literals,我正在编写使用策略模式的代码,但是我不确定我是否对所使用的抽象量过火了。 我使用各种概率分布(如正态分布或均匀分布)为我的应用随机生成数字,或者不断生成数字(根本不是随机的) 不同的算法有不同的文本返回类型,一些返回int,而另一些返回float和double 遵循接口隔离原则,我创建了ITYPEValuePicker接口,每个接口都有以下定义: 公共接口ITYPEValuePicker { 公共类型getTYPE(); } 其中“TYPE”是一种特定的数据类型,如float、int等 现在我

我正在编写使用策略模式的代码,但是我不确定我是否对所使用的抽象量过火了。 我使用各种概率分布(如正态分布或均匀分布)为我的应用随机生成数字,或者不断生成数字(根本不是随机的)

不同的算法有不同的文本返回类型,一些返回int,而另一些返回float和double

遵循接口隔离原则,我创建了ITYPEValuePicker接口,每个接口都有以下定义:

公共接口ITYPEValuePicker
{
公共类型getTYPE();
}
其中“TYPE”是一种特定的数据类型,如float、int等

现在我的随机算法实现了这些接口,可以在代码中使用

GaussianValuePicker实现IFloatValuePicker,IDoubleValuePicker

UniformValuePicker实现IFloatValuePicker、iDupleValuePicker、IIntValuePicker

ConstantValuePicker实现IIntValuePicker、IFloatValuePicker和iDupleValuePicker
我的代码很大一部分依赖于随机选择的值和随机选择的算法来选择这些值。我的问题是: 有没有理由不让我用这些通用的“IValuePicker”来替换所有的幻数,并让任何值的实际获取委托给特定的算法

例如:

公共类鸡肉
{
浮动高度;
智力年龄;
公鸡(浮子高度,内码)
{
高度=高度;
这个。年龄=年龄;
}
公共布尔isSuperOld()
{
如果(年龄>99岁)
{
返回true;
}
返回false;
}
}
vs

公共类鸡肉
{
采摘器高度;
IIntValuePicker年龄;
公鸡(IFloatValuePicker身高、IIntValuePicker年龄)
{
高度=高度;
这个。年龄=年龄;
}
公共布尔isSuperOld()
{
if(age.getInt()>99)
{
返回true;
}
返回false;
}
}
很抱歉这个人为的例子,但我希望它能说明对不同值的延迟的、几乎是(懒惰的[我不确定这是正确的术语]?)评估。这是YAGNI的一个例子(我知道它是否是YAGNI是非常复杂的上下文)还是这是接口的有效使用?

在您的计算代码中使用
int/double/BigDecimal
(都是
Number
)等等:

float x = 0.12F;
Number n = x;
n = n.longValue() * 9;
x = n.doubleValue(); // 0.0F
包装类我从来没有发现过有用的东西——只是一种变量类型的变量,比如JavaScript的Basic,但它们也远远不是最优的


API用户必须准备数据,这就是生命。

我认为在这种情况下,您确实应该使用泛型。