我有以下两节课:
public class GenericNumberOperation {
public GenericNumberOperation() {}
public <T extends Number> T getSomeValue (boolean tf) {
T number;
if(tf) {
number = new Double(1.0);
}
else {
number = new Integer(11);
}
return (T) number;
}
}
和:
public class GenericNumberTest {
public GenericNumberTest() {}
public static void main(String[] args) {
GenericNumberOperation gno = new GenericNumberOperation();
Double d = gno.getSomeValue(true);
Integer i = gno.getSomeValue(false);
}
}
当我运行测试时,一切都是笨拙的。如果我将类型参数化更改为:
public <T> T getSomeValue(boolean tf)
编译器抱怨,报告:
错误:类型不兼容的整数不能转换为T number = new Integer(11);
其中T是类型变量T扩展了在方法getSomeValue(boolean)中声明的Object
它同样对Double有所抱怨。为什么?
编辑:我犯了一个错误。这实际上是有效的代码。
public class GenericNumberOperation {
public GenericNumberOperation() {}
public <T extends Number> T getSomeValue (boolean tf) {
Number number;
if(tf) {
number = new Double(1.0);
}
else {
number = new Integer(11);
}
return (T) number;
}
}
现在我明白了@Sotirios在干什么。
忘记您要使用它做什么。我们仅从语言角度看待这一点。
报关单
public <T extends Number> T getSomeValue (boolean tf) {
定义一个T
以限制的新类型Number
。这意味着,一个呼叫者只能绑定Number
或任何亚型Number
到T
调用方法时。在该方法中,您不知道该类型可能是什么。
因此,你不能做
T number = new Double(1.0);
因为你不知道那T
是Double
。如果我将方法调用为
Float f = genOp.getSomeValue(true);
T
应该是Float
。编译器不能保证类型安全,因此拒绝它(方法内的分配,如果允许的话,ClassCastException
将在运行时抛出)。如果使用强制转换,则是告诉编译器您确定自己在做什么。它会警告您,但会信任您。
同样,声明
public <T> T getSomeValue(boolean tf)
定义一个T
无界的新类型。这意味着您可以将任何类型绑定到T
,这使问题更加严重。我现在可以做
String f = genOp.getSomeValue(true);
强制类型转换 隐式类型转换:隐式类型转换又称为自动类型转换,隐式类型转换可分为三种:算术转换、赋值转换和输出转换。 显式类型转换:显式类型转换又称为强制类型转换,指的是使用强制类型转换运算符,将一个变量或表达式转化成所需的类型,这种类型转换可能会造成数据的精度丢失。 数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。 转换的方法有两种: 自动转换(隐式转换):遵循一定的规则
本文向大家介绍浅谈Java数值类型的转换与强制转换,包括了浅谈Java数值类型的转换与强制转换的使用技巧和注意事项,需要的朋友参考一下 数值类型之间的转换 6个实心箭头箭头表示无信息丢失的转换; 3个虚箭头表示可能有精度损失的转换. 当使用上面两个数值进行二元操作时,先要将两个操作数转换为同一类型,然后再进行计算. 规则:`两个数中小类型的值将自动转换为大类型的值. 小转大可以,但是大转小会损失精
问题内容: 让我们假设下表(例如,几个内部join语句的结果): 例如,您可以从以下语句中获取: 现在,如果我想将t1.column_1和t2.column_2总结如下 结果显示如下: 我的问题基本上是:有没有一种方法可以将NULL类型转换为0以便进行一些数学运算? 我曾尝试和,而是保持一个。 问题答案: 使用的列值转换到零。或者,COALESCE函数将执行相同的操作,除了(1)符合ANSI标准,
问题内容: 这可能是在某个地方被问到的,但我找不到。有人可以澄清为什么此代码可以编译并打印出来吗? 问题答案: 它被解析为: 所有和运算符都是一元或的。 在这种情况下,两次取反,因此将其打印为。
从上面的标题来看,目前我遇到了一个问题,即无法从一个模型类转换到另一个模型类。我写的代码有问题吗?请随时向我询问更多信息。非常感谢。 我怀疑: 这种方法“selectTheOldFnException”有一些错误,那就是使用了hibernate,但我不确定这个理论。 REST控制器 使用HIBERNATE-MatchingEngine选择POJO。班 POJO班 例外代码
我在这里遇到了一个关于带列表的泛型有界类型的小问题。请帮帮我! 有什么方法可以克服这个问题,或者我可以安全地压制警告吗?