泛型没有施加和加在一起
我想检查,如果我的泛型类型是整数。如果他们是,他们应该被转换为两倍,之后应该加在一起。我得到错误“运算符*未定义为参数类型(s)E,double”。之后将两个铸造值一起添加也是同样的问题。泛型没有施加和加在一起
我该如何解决这个问题?
感谢提前:)
public void add(E value1, E value2) {
if(value1 instanceof Integer && value2 instanceof Integer) {
double valueCast1 = value1 * 1.0;
double valueCast2 = value2 * 1.0;
System.out.println(value1 + value2);
}
}
如果我没有记错,你需要使用通用的,因为它的确认它是一种后铸造自我:
(int)value1
虽然这可能是一个csharp的东西..
这只有在'value1'和'value2'被声明为'Integer'时才会有效。由于'E'没有任何限制,因此“真实”类型是“Object”,它不能转换为“int”。 –
您必须为您的整数值添加强制转换。你先前检查过它们是否是整数,但是用句子表示
double valueCast1 = value1 * 1.0;
double valueCast2 = value2 * 1.0;
它们仍然是通用的E类。你必须指定它们应该被视为整数,所以
double valueCast1 = (Integer)value1 * 1.0;
double valueCast2 = (Integer)value2 * 1.0;
就是这样。
相反乘以1,你应该能够直接强制转换它为什么要这样写代码的两倍
double valueCast1= (double)value1;
double valueCast2 = (double)value2;
这在Java中不起作用,因为静态类型是'E'(在这种情况下的确是'Object'),而运行时类型是'Integer',并且这两者都不能直接转换为'double'。 –
我的不好。 Integer不能被直接转换为Java中的double类型。在Integer类中找到一个可以帮助 double valueCast1 =((Integer)(value1))的方法。的doubleValue(); double valueCast2 =((Integer)(value2))。的doubleValue(); – Tphil
? – Kayaman
我认为Kayaman可能会问的是为什么你会想要乘以1. – Griffin
Java和JavaScript是两种不同的语言... * 1.0是为JavaScript ... –