我有以下代码在工作,我不确定为什么它不会引发异常:
List[] x=new ArrayList[2];
x[0]=new ArrayList<Integer>();
x[1]=new ArrayList<String>();
x[0].add("test");
x[1].add(5);
System.out.println(x[0]);
System.out.println(x[1]);
此打印:
[test]
[5]
x[0]
是整数数组,它添加String没有任何问题。 x[1]
是String数组,它添加整数没有任何问题。
这是怎么工作的?
答案 0 :(得分:4)
首先,这与数组无关。以下表现出相同的行为:
List x = new ArrayList();
x = new ArrayList<Integer>();
x.add("test");
System.out.println(x);
其行为方式的关键原因是x
被声明为 raw List
类型。有关全面的讨论,请参见What is a raw type and why shouldn't we use it?
答案 1 :(得分:2)
您已经声明了原始类型列表的数组。编译代码后,泛型值在运行时不存在。因此,基本上,您的列表的类型为List<Object>
。
"test"
是String
,基本上是Object
5
自动装箱到Integer
的{{1}} 所以您的编译器不会抛出任何错误。如果您使用的是IDE,则可能会警告您:
以原始类型`java.util.List'的成员的形式对'add(E)'的未选中调用
(来自IntelliJ)
答案 2 :(得分:0)
您的数组for he in range(1, 25):
he_str = str(he)
### df_all is a dataframe that contains only 3200 records ###
### df_all does contain 146 columns. Maybe this is why? ###
df_all = df_all.withColumn('PROFIT_INC_HE' + he_str, functions.lit(0))
df_all = df_all.withColumn('PROFIT_DEC_HE' + he_str, functions.lit(0))
### TIER_PRICE_FACTORS is list of 4 elements ###
for tiers in TIER_PRICE_FACTORS:
tiers_str = str(tiers).replace('.', '')
df_all = df_all.withColumn('PROFIT_INC_HE' + he_str, functions.col('PROFIT_INC_HE' + he_str) \
+ functions.col('BID_PROFIT_INC_HE' + he_str + '_' + tiers_str))
df_all = df_all.withColumn('PROFIT_DEC_HE' + he_str, functions.col('PROFIT_DEC_HE' + he_str) \
+ functions.col('BID_PROFIT_Dec_HE' + he_str + '_' + tiers_str))
被定义为原始类型x
,因此类型参数被删除,最终您调用了List
,在整数的情况下,它依赖于在自动装箱中。
如果您尝试将add(Object)
和x[0]
别名为期望类型的变量,则首先会遇到编译错误:
x[1]