java重新编译期间“For语句”中的不兼容类型
全部, 首先,我不是一个java程序员——在过去的两天里,我学到了我所知道的只是尝试重新编译一个类文件。我已经审阅了这里的每一篇文章,这些文章都有“不兼容类型”,但仍然无法解决这个问题。我有一个java文件,但没有类文件,当我尝试重新编译它时收到以下错误 错误:java重新编译期间“For语句”中的不兼容类型,java,javac,foreach,Java,Javac,Foreach,全部, 首先,我不是一个java程序员——在过去的两天里,我学到了我所知道的只是尝试重新编译一个类文件。我已经审阅了这里的每一篇文章,这些文章都有“不兼容类型”,但仍然无法解决这个问题。我有一个java文件,但没有类文件,当我尝试重新编译它时收到以下错误 错误: Source\idm\sap\ConfigDataTM.java:153: incompatible types found : java.lang.Object required: idm.sap.ConfigDataTM /*
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变量有关,但除此之外,我就迷路了
任何帮助都将不胜感激。试试以下方法:
if (xList != null)
{
for (Object x : xList)
{
if ((x != null) && (((ConfigDataTM)x).getLoadFlag()) && (fileTYPE.equals(((ConfigDataTM)x).getType())))
fileName = ((ConfigDataTM)x).getFileName();
}
}
否则,xList似乎不包含所需的数据类型。请尝试以下操作:
if (xList != null)
{
for (Object x : xList)
{
if ((x != null) && (((ConfigDataTM)x).getLoadFlag()) && (fileTYPE.equals(((ConfigDataTM)x).getType())))
fileName = ((ConfigDataTM)x).getFileName();
}
}
否则,xList似乎不包含您期望的数据类型。这与此有关。编译器正在尝试确保类型安全性—xList中的每个对象都是ConfigDataTM的实例。由于xList的类型没有泛型参数,因此默认为Object。也就是说,它可以保存任何类型的对象,而不仅仅是ConfigDataTM的实例。要解决这个问题,您必须确保正确处理xList的泛型类型以确保编译时安全,或者显式地使用cast来提供运行时安全性
例如,使用泛型
List<ConfigDataTM> xList = getVector();
// requires getVector() to return List<ConfigDataTM>
对于非泛型,如果x不是ConfigDataTM的实例,则会引发运行时异常,应用程序将崩溃。如果使用泛型,则编译器能够在编译时检查列表的处理方式,并确保只有ConfigDataTM的实例存储在xList中。这与此有关。编译器正在尝试确保类型安全性—xList中的每个对象都是ConfigDataTM的实例。由于xList的类型没有泛型参数,因此默认为Object。也就是说,它可以保存任何类型的对象,而不仅仅是ConfigDataTM的实例。要解决这个问题,您必须确保正确处理xList的泛型类型以确保编译时安全,或者显式地使用cast来提供运行时安全性
例如,使用泛型
List<ConfigDataTM> xList = getVector();
// requires getVector() to return List<ConfigDataTM>
对于非泛型,如果x不是ConfigDataTM的实例,则会引发运行时异常,应用程序将崩溃。如果使用泛型,那么编译器能够在编译时检查列表的处理方式,并确保只有ConfigDataTM的实例存储在xList中。+1以获得比我自己的更好的解释和方法。这两种方法都可以,但是对于那些正在检查代码的人来说,这个解决方案是最好的。这非常有效,谢谢!我甚至理解你的解释。这一成功让我想更多地涉猎Java编程。+1,以获得比我自己更好的解释和方法。这两种方法都可以,但是对于那些正在检查代码的人来说,这个解决方案是最好的。这非常有效,谢谢!我甚至理解你的解释。这一成功让我想在Java编程方面多涉猎一些。Zéychin-你的解决方案也奏效了!你们太棒了。我很感激没有因为对这个问题知之甚少而被“殴打”。我喜欢人们不用判断就能提供帮助:>Zéychin-你的解决方案也奏效了!你们太棒了。我很感激没有因为对这个问题知之甚少而被“殴打”。我喜欢人们在没有判断的情况下提供帮助:>我添加了Java标记以在问答中启用语法突出显示。我添加了Java标记以在问答中启用语法突出显示。