枚举错误,高分求解释,错误原因。

lee1473336489 2013-05-08 03:45:25
	G4C_1_B(Arrays.asList(SqlId.g4c_1_b_deleteTodayData,
SqlId.g4c_1_b_total_deleteTodayData), Arrays.asList(
SqlId.g4c_1_b_insert, SqlId.g4c_1_b_total_insert), Arrays.asList(
EvaluateResult2G4c_1_b.class, EvaluateResult2G4c_1_b_total.class)),

G4C_1_F(Arrays.asList(SqlId.g4c_1_f_deleteTodayData), Arrays
.asList(SqlId.g4c_1_f_insert), Arrays
.asList( EvaluateResult2G4c_1_f.class)),//这个是错的


G4C_1_C(Arrays.asList(SqlId.g4c_1_c_deleteTodayData,
SqlId.g4c_1_c_total_deleteTodayData), Arrays.asList(
SqlId.g4c_1_c_insert, SqlId.g4c_1_c_total_insert), Arrays.asList(
EvaluateResult2G4c_1_c.class, EvaluateResult2G4c_1_c_total.class));

private List<SqlId> deleteId;
private List<SqlId> insertId;

private List<Class<? extends IEvaluateResultMapping>> mappings;

private EvaluateResultSqlId(List<SqlId> deleteId, List<SqlId> insertId,
List<Class<? extends IEvaluateResultMapping>> mappings) {
this.deleteId = deleteId;
this.insertId = insertId;
this.mappings = mappings;

}

error:The constructor EvaluateResultSqlId(List<SqlId>,List<SqlId>,List<Class<EvaluateResult2G4c_1_f>>) is undefined
...全文
155 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lee1473336489 2013-05-09
  • 打赏
  • 举报
回复
[quote=引用 3 楼 lvzg_005 的回复:] quote] 大神啊,膜拜,讲得很透彻。。。确实是和class的泛行有关。我已经把代码改成如下了
G4C_1_B(Arrays.asList(SqlId.g4c_1_b_deleteTodayData,
			SqlId.g4c_1_b_total_deleteTodayData), Arrays.asList(
			SqlId.g4c_1_b_insert, SqlId.g4c_1_b_total_insert), Arrays.asList(
			new EvaluateResult2G4c_1_b(), new EvaluateResult2G4c_1_b_total())),

	G4C_1_F(Arrays.asList(SqlId.g4c_1_f_deleteTodayData), Arrays
			.asList(SqlId.g4c_1_f_insert), Arrays
			.asList(new EvaluateResult2G4c_1_f())),

	G4C_1_C(Arrays.asList(SqlId.g4c_1_c_deleteTodayData,
			SqlId.g4c_1_c_total_deleteTodayData), Arrays.asList(
			SqlId.g4c_1_c_insert, SqlId.g4c_1_c_total_insert), Arrays.asList(
			new EvaluateResult2G4c_1_c(), new EvaluateResult2G4c_1_c_total()));
lvzg_005 2013-05-08
  • 打赏
  • 举报
回复
我觉得这个问题和枚举没关系。 问题的关键在于Arrays.asList方法 比如List<Class<? extends Collection>> lst = Arrays.asList() List<Class<? extends Collection>> lst =Arrays.asList(List.class) 如果只有一个参数List类型,编译就会报错:The constructor EvaluateResultSqlId(List<String>, List<String>, List<Class<? extends List>>) is undefined 如果在添加一个参数Set类型,结果编译正常。 List<Class<? extends Collection>> lst =Arrays.asList(List.class,Set.class) 多举几个例子就会发现,asList方法中的参数总是会转换成最接近这个class的类型, 也就是说,只有一个参数List时,会提示 The constructor EvaluateResultSqlId(List<String>, List<String>, List<Class<List>>) is undefined 这句话可以看出返回的结果必须是List<Class<List>>,而不能是List<Class<? extends Collection>> 但是如果在添加一个set类型,两者的类型可以转化成Collection>> ,所以没有报错 但是如果添加一个LinkedList类型,照样报错,原因是这两个类型的最大共同类型为List 错误提示:The constructor EvaluateResultSqlId(List<String>, List<String>, List<Class<? extends List>>) is undefined 我们可以总结:里面的对象会自动向上转型,但是转化的原则是两者的最大类型,有点像最大公约数 难道和class的泛型有关系??
lee1473336489 2013-05-08
  • 打赏
  • 举报
回复
引用 1 楼 xiyuan1999 的回复:
[quote=引用 楼主 lee1473336489 的回复:]
	G4C_1_B(Arrays.asList(SqlId.g4c_1_b_deleteTodayData,
			SqlId.g4c_1_b_total_deleteTodayData), Arrays.asList(
			SqlId.g4c_1_b_insert, SqlId.g4c_1_b_total_insert), Arrays.asList(
			EvaluateResult2G4c_1_b.class, EvaluateResult2G4c_1_b_total.class)),

	G4C_1_F(Arrays.asList(SqlId.g4c_1_f_deleteTodayData), Arrays
			.asList(SqlId.g4c_1_f_insert), Arrays
			.asList( EvaluateResult2G4c_1_f.class)),//这个是错的


	G4C_1_C(Arrays.asList(SqlId.g4c_1_c_deleteTodayData,
			SqlId.g4c_1_c_total_deleteTodayData), Arrays.asList(
			SqlId.g4c_1_c_insert, SqlId.g4c_1_c_total_insert), Arrays.asList(
			EvaluateResult2G4c_1_c.class, EvaluateResult2G4c_1_c_total.class));

	private List<SqlId> deleteId;
	private List<SqlId> insertId;

	private List<Class<? extends IEvaluateResultMapping>> mappings;

	private EvaluateResultSqlId(List<SqlId> deleteId, List<SqlId> insertId,
			List<Class<? extends IEvaluateResultMapping>> mappings) {
		this.deleteId = deleteId;
		this.insertId = insertId;
		this.mappings = mappings;

	}
error:The constructor EvaluateResultSqlId(List<SqlId>,List<SqlId>,List<Class<EvaluateResult2G4c_1_f>>) is undefined
建议LZ先了解下JAVA的构造函数的用法。[/quote] G4C_1_F(Arrays.asList(SqlId.g4c_1_f_deleteTodayData), Arrays .asList(SqlId.g4c_1_f_insert), Arrays .asList(EvaluateResult2G4c_1_f.class,EvaluateResult2G4c_1_c_total.class)) 把这个换成这样就不报错了。构造函数我懂,你能直接说错误的原因?
xiyuan1999 2013-05-08
  • 打赏
  • 举报
回复
引用 楼主 lee1473336489 的回复:
	G4C_1_B(Arrays.asList(SqlId.g4c_1_b_deleteTodayData,
			SqlId.g4c_1_b_total_deleteTodayData), Arrays.asList(
			SqlId.g4c_1_b_insert, SqlId.g4c_1_b_total_insert), Arrays.asList(
			EvaluateResult2G4c_1_b.class, EvaluateResult2G4c_1_b_total.class)),

	G4C_1_F(Arrays.asList(SqlId.g4c_1_f_deleteTodayData), Arrays
			.asList(SqlId.g4c_1_f_insert), Arrays
			.asList( EvaluateResult2G4c_1_f.class)),//这个是错的


	G4C_1_C(Arrays.asList(SqlId.g4c_1_c_deleteTodayData,
			SqlId.g4c_1_c_total_deleteTodayData), Arrays.asList(
			SqlId.g4c_1_c_insert, SqlId.g4c_1_c_total_insert), Arrays.asList(
			EvaluateResult2G4c_1_c.class, EvaluateResult2G4c_1_c_total.class));

	private List<SqlId> deleteId;
	private List<SqlId> insertId;

	private List<Class<? extends IEvaluateResultMapping>> mappings;

	private EvaluateResultSqlId(List<SqlId> deleteId, List<SqlId> insertId,
			List<Class<? extends IEvaluateResultMapping>> mappings) {
		this.deleteId = deleteId;
		this.insertId = insertId;
		this.mappings = mappings;

	}
error:The constructor EvaluateResultSqlId(List<SqlId>,List<SqlId>,List<Class<EvaluateResult2G4c_1_f>>) is undefined
建议LZ先了解下JAVA的构造函数的用法。

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧