泛型没有施加和加在一起

泛型没有施加和加在一起

问题描述:

我想检查,如果我的泛型类型是整数。如果他们是,他们应该被转换为两倍,之后应该加在一起。我得到错误“运算符*未定义为参数类型(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); 
      } 
     } 
+1

? – Kayaman

+0

我认为Kayaman可能会问的是为什么你会想要乘以1. – Griffin

+0

Java和JavaScript是两种不同的语言... * 1.0是为JavaScript ... –

如果我没有记错,你需要使用通用的,因为它的确认它是一种后铸造自我:

(int)value1 

虽然这可能是一个csharp的东西..

+0

这只有在'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; 
+0

这在Java中不起作用,因为静态类型是'E'(在这种情况下的确是'Object'),而运行时类型是'Integer',并且这两者都不能直接转换为'double'。 –

+0

我的不好。 Integer不能被直接转换为Java中的double类型。在Integer类中找到一个可以帮助 double valueCast1 =((Integer)(value1))的方法。的doubleValue(); double valueCast2 =((Integer)(value2))。的doubleValue(); – Tphil