java - Java 重新编译期间 "For Statement"中的不兼容类型

标签 java javac foreach

全部,

首先,我不是 Java 程序员 - 我在过去两天里学到了我所知道的,只是试图重新编译一个类文件。我已经查看了此处所有具有“不兼容类型”但仍无法解决问题的帖子。我有一个 java 文件但没有类文件,当我尝试重新编译它时收到以下错误。

错误:

Source\idm\sap\ConfigDataTM.java:153: incompatible types
found   : java.lang.Object
required: idm.sap.ConfigDataTM
/* 177 */       for (ConfigDataTM x : xList) {

来源:

/*     */   public boolean add(ConfigDataTM element)
/*     */   {
/* 161 */     return this.rootData.add(element); } 
/* 162 */   public boolean addSysFile(String fileName) { return add(new ConfigDataTM    (fileName, "SYS", true)); } 
/* 163 */   public boolean addPasswdFile(String fileName) { return add(new ConfigDataTM(fileName, "PASS", true)); } 
/* 164 */   public boolean addVPNFile(String fileName) { return add(new ConfigDataTM(fileName, "VPN", true)); }
/*     */ 
/*     */   public String getFileToBeLoaded(String fileTYPE)
/*     */   {
/* 168 */     if ((!fileTYPE.equals("SYS")) && (!fileTYPE.equals("PASS")) && (!fileTYPE.equals("VPN"))) {
/* 169 */       System.err.println("[ConfigDataTM] WARNING: BAD TYPE");
/* 170 */       return null;
/*     */     }
/*     */ 
/* 173 */     String fileName = null;
/* 174 */     List xList = getVector();
/*     */ 
/* 176 */     if (xList != null) {
/* 177 */       for (ConfigDataTM x : xList) {
/* 178 */         if ((x != null) && 
/* 179 */           (x.getLoadFlag()) && (fileTYPE.equals(x.getType()))) fileName =   x.getFileName();
/*     */       }
/*     */ 
/*     */     }
/*     */ 
/* 184 */     return fileName;
/*     */   }

我知道错误与 ConfigDataTM 元素和 xList 变量有关,但除此之外我就迷路了。

如有任何帮助,我们将不胜感激。

最佳答案

这与generics有关.编译器试图确保类型安全——xList 中的每个对象都是 ConfigDataTM 的一个实例。由于 xList 的类型没有通用参数,因此它默认为 Object。也就是说,它可以包含任何类型的 Object,而不仅仅是 ConfigDataTM 的实例。要解决此问题,您必须确保正确处理 xList 的通用类型(确保编译时安全)或显式使用强制转换(提供运行时安全)。

例如。 (使用泛型)

List<ConfigDataTM> xList = getVector(); 
// requires getVector() to return List<ConfigDataTM>

没有泛型

for (Object object : xList) {
    ConfigDataTM x = (ConfigDataTM) object;
    ...

对于非泛型,如果 x 不是 ConfigDataTM 的实例,那么将抛出运行时异常并且应用程序将崩溃。如果使用泛型,则编译器能够在编译时检查列表的处理方式,并确保只有 ConfigDataTM 的实例存储在 xList 中。

关于java - Java 重新编译期间 "For Statement"中的不兼容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6686905/

相关文章:

java - 在zabbix java geatway中,我们如何为JDK提供运行时JAVA_HOME属性而不影响现有的JAVA_HOME属性

java - 为什么这些类只在同一个文件中时才编译?

c++ - 指向数组的指针在 STL 与常规 for 循环中不同

java - 如何处理多个 Route 的异常

java - RSA公钥编码,Java和Android中,相同的代码,不同的结果

java - etat HTTP 500 - javax.servlet.ServletException : javax. servlet.jsp.JspException:找不到 ActionMappings 或 ActionFormBeans 集合

java - 枚举定义中的静态上下文

php - 如何用foreach批量更新记录?

c# - 如何在 ASP.NET C# 中使用 foreach 获取 CheckBoxList 中选定项的值?