下面(很旧)的代码作为jar文件正在运行,没有错误。反编译之后,我尝试添加一些记录器以检查流程。这样做时,代码显示了一些类型转换错误,如下所述。
有什么方法可以手动修复,还是可以自定义编译器以避免这些类型转换错误?
[注意:我已经添加了所需的依赖关系,并且还尝试在Eclipse SDK-3.2.2版本中使用java 1.8&eclipse(最新版本)和java 1.4.2_13运行此代码,但是遇到了相同的类型转换问题。
//
// Decompiled by Procyon v0.5.36
//
package com.nstar.exp;
import java.sql.SQLException;
import java.io.IOException;
import com.energyict.cbo.BusinessException;
import com.energyict.nstar.core.UsagePoint;
import com.energyict.nstar.core.Premise;
import java.util.Enumeration;
import java.io.PrintWriter;
import com.energyict.mdw.core.FolderFactory;
import com.energyict.mdw.export.ActionHandler;
import com.energyict.nstar.calc.AccountCount;
import com.energyict.mdw.core.VirtualMeter;
import com.energyict.mdw.core.FolderAlias;
import com.energyict.mdw.core.Folder;
import com.energyict.cbo.TimePeriod;
import com.energyict.nstar.calc.AccountCountCalculator;
import java.util.Calendar;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import com.energyict.nstar.factory.FactoryBuilder;
import com.energyict.mdw.core.MeteringWarehouse;
import java.util.ArrayList;
import com.energyict.nstar.factory.EstimationFactory;
import com.energyict.nstar.factory.PremiseFactory;
import com.energyict.nstar.factory.UsagePointFactory;
import com.energyict.mdw.core.VirtualMeterFactory;
import java.util.Date;
import java.util.List;
import java.util.Hashtable;
import com.energyict.eisexport.core.AbstractExporter;
public class DailyLE_Load extends AbstractExporter
{
private Hashtable usgPtStore;
private Hashtable premStore;
List vmList;
Date fromDate;
Date toDate;
VirtualMeterFactory vmf;
UsagePointFactory usgf;
PremiseFactory pf;
EstimationFactory estf;
String usgPt1;
String usgPt2;
String usgPt3;
String usgPt4;
String usgPt5;
String usgPt6;
String usgPt7;
String usgPt8;
public DailyLE_Load() {
this.vmList = new ArrayList();
this.vmf = MeteringWarehouse.getCurrent().getVirtualMeterFactory();
this.usgf = FactoryBuilder.getInstance().getUsagePointFactory();
this.pf = FactoryBuilder.getInstance().getPremiseFactory();
this.estf = FactoryBuilder.getInstance().getEstimationFactory();
}
protected void export() throws BusinessException, IOException, SQLException {
final TimePeriod ex_period = this.getExportOccurrence().getPeriod();
final ActionHandler handler = this.getHandler();
final SimpleDateFormat df = new SimpleDateFormat("dd");
final SimpleDateFormat dateFormat = new SimpleDateFormat("MMMMMMM yyyy");
final DecimalFormat df2 = new DecimalFormat("############.###");
final Calendar cal = Calendar.getInstance();
cal.setTime(ex_period.getFrom());
cal.set(5, 1);
cal.set(11, 0);
cal.set(12, 0);
this.fromDate = cal.getTime();
cal.add(2, 1);
this.toDate = cal.getTime();
final String sversion = this.getProperty("Version");
this.usgPt1 = this.getProperty("Large customer usagepoint1");
this.usgPt2 = this.getProperty("Large customer usagepoint2");
this.usgPt3 = this.getProperty("Large customer usagepoint3");
this.usgPt4 = this.getProperty("Large customer usagepoint4");
this.usgPt5 = this.getProperty("Large customer usagepoint5");
this.usgPt6 = this.getProperty("Large customer usagepoint6");
this.usgPt7 = this.getProperty("Large customer usagepoint7");
this.usgPt8 = this.getProperty("Large customer usagepoint8");
final FolderFactory ff = MeteringWarehouse.getCurrent().getFolderFactory();
final List domainList = ff.findByExternalNamePattern(String.valueOf(sversion) + "/%EMA");
final AccountCountCalculator acc = new AccountCountCalculator();
final TimePeriod tp = new TimePeriod(this.fromDate, this.toDate);
final List acctCountList = acc.calculateAccountCounts(1, tp);
for (int a = 0; a < domainList.size(); ++a) {
final Folder curDomainf = domainList.get(a); //Type mismatch: cannot convert from Object to Folder
final String curDomain = curDomainf.getName();
handler.startNewFile(curDomain);
final PrintWriter pw = handler.getPrintWriter();
pw.println("[ Daily LE Report ] for : " + sversion + "/" + curDomain);
pw.println(dateFormat.format(this.fromDate));
pw.println();
pw.println("Day,DS,CS,Total Energy,%DS,%CS,Changes DS,Changes CS,#Customers(DS),#Customers(CS),Total #Customers,Retail DS,Retail CS,RemainDS, RemainCS, % RemainDS, %RemainCS, % RemainDS, % RemainCS");
final Folder BSFolder = ff.findChild("Basic Service", curDomainf);
final List faBS = BSFolder.getFolderAliasesChildren();
final List fldrBS = new ArrayList();
for (int x = 0; x < faBS.size(); ++x) {
final Folder curFolder = faBS.get(x).getFolder(); //The method getFolder() is undefined for the type Object
fldrBS.add(curFolder);
}
final Folder CSFolder = ff.findChild("Competitive Supplier", curDomainf);
final List faCS = CSFolder.getFolderAliasesChildren();
final List fldrCS = new ArrayList();
for (int x2 = 0; x2 < faCS.size(); ++x2) {
final Folder curFolder2 = faCS.get(x2).getFolder(); //The method getFolder() is undefined for the type Object
fldrCS.add(curFolder2);
}
double prevBSPercent = 0.0;
double prevCSPercent = 0.0;
double prevRemBSPercent = 0.0;
double prevRemCSPercent = 0.0;
cal.clear();
cal.setTime(this.fromDate);
cal.add(5, -1);
Date f = cal.getTime();
this.storeUsgPts_Prems(f);
while (f.before(this.toDate)) {
cal.add(5, 1);
final Date nt = cal.getTime();
double consumBS = 0.0;
int cntBS = 0;
int cntCS = 0;
for (int i = 0; i < faBS.size(); ++i) {
final Folder curFolder3 = fldrBS.get(i); //Type mismatch: cannot convert from Object to Folder
this.vmList = curFolder3.getVirtualMeters();
for (int j = 0; j < this.vmList.size(); ++j) {
final VirtualMeter vm = this.vmList.get(j); //Type mismatch: cannot convert from Object to VirtualMeter
if (vm.getName().equals("Total kWh")) {
final double consum = vm.getField(0).getConsumption(f, nt).doubleValue() / 1000.0;
consumBS += consum;
}
}
if (!f.before(this.fromDate)) {
for (int k = 0; k < acctCountList.size(); ++k) {
final AccountCount ac = acctCountList.get(k); //Type mismatch: cannot convert from Object to AccountCount
if (ac.getDomain().equals(curDomain) && ac.getAsset().equals(curFolder3.getName()) && ac.getDate().equals(f)) {
cntBS += ac.getCount();
}
}
}
}
double consumCS = 0.0;
for (int l = 0; l < faCS.size(); ++l) {
final Folder curFolder4 = fldrCS.get(l); //Type mismatch: cannot convert from Object to Folder
this.vmList = curFolder4.getVirtualMeters();
for (int m = 0; m < this.vmList.size(); ++m) {
final VirtualMeter vm2 = this.vmList.get(m); //Type mismatch: cannot convert from Object to VirtualMeter
if (vm2.getName().equals("Total kWh")) {
final double consum2 = vm2.getField(0).getConsumption(f, nt).doubleValue() / 1000.0;
consumCS += consum2;
}
}
if (!f.before(this.fromDate)) {
for (int k2 = 0; k2 < acctCountList.size(); ++k2) {
final AccountCount ac2 = acctCountList.get(k2); //Type mismatch: cannot convert from Object to AccountCount
if (ac2.getDomain().equals(curDomain) && ac2.getAsset().equals(curFolder4.getName()) && ac2.getDate().equals(f)) {
cntCS += ac2.getCount();
}
}
}
}
double percentBS = consumBS / (consumBS + consumCS) * 100.0;
double percentCS = consumCS / (consumBS + consumCS) * 100.0;
if (consumBS == 0.0 || consumCS == 0.0) {
percentBS = 0.0;
percentCS = 0.0;
}
double changeBS = 0.0;
double changeCS = 0.0;
changeBS = percentBS - prevBSPercent;
changeCS = percentCS - prevCSPercent;
final Enumeration e = this.premStore.keys();
while (e.hasMoreElements()) {
final String premNm = e.nextElement(); //Type mismatch: cannot convert from Object to String
final premDetail premDtl = this.premStore.get(premNm); //Type mismatch: cannot convert from Object to DailyLE_Load.premDetail
Premise curPrem = premDtl.getprem();
final TimePeriod prem_tp = premDtl.getperiod();
if (!prem_tp.includes(f)) {
this.premStore.remove(premNm);
curPrem = this.pf.findByFolder(curPrem.getFolder(), f);
this.premStore.put(premNm, new premDetail(curPrem, curPrem.getPeriod(), curPrem.getDomain()));
}
}
final Enumeration e2 = this.usgPtStore.keys();
while (e2.hasMoreElements()) {
final String usgPtNm = e2.nextElement(); //Type mismatch: cannot convert from Object to String
final usgPtDetail usgPtDtl = this.usgPtStore.get(usgPtNm); //Type mismatch: cannot convert from Object to DailyLE_Load.usgPtDetail
UsagePoint curUsgPt = usgPtDtl.getusgPt();
TimePeriod up_tp = usgPtDtl.getperiod();
if (!up_tp.includes(f)) {
this.usgPtStore.remove(usgPtNm);
curUsgPt = this.usgf.findByFolder(curUsgPt.getFolder(), f);
up_tp = curUsgPt.getPeriod();
this.usgPtStore.put(usgPtNm, new usgPtDetail(curUsgPt, up_tp));
}
}
double retailBS = 0.0;
double retailCS = 0.0;
double remBS = 0.0;
double remCS = 0.0;
double percentRemBS = 0.0;
double percentRemCS = 0.0;
double changeRemBS = 0.0;
double changeRemCS = 0.0;
final Enumeration e3 = this.usgPtStore.keys();
while (e3.hasMoreElements()) {
final String usgPtNm2 = e3.nextElement(); //Type mismatch: cannot convert from Object to String
final usgPtDetail usgPtDtl2 = this.usgPtStore.get(usgPtNm2); //Type mismatch: cannot convert from Object to DailyLE_Load.usgPtDetail
final UsagePoint curUsgPt = usgPtDtl2.getusgPt();
final String suffix = usgPtNm2.substring(usgPtNm2.length() - 1);
final String PremNm = "prem" + suffix;
final String premDomain = this.premStore.get(PremNm).getDomain(); //The method getDomain() is undefined for the type Object
if (premDomain.equals(curDomain)) {
final VirtualMeter adVM = this.vmf.findByExternalName("AD/" + curUsgPt.getName());
final double consum3 = adVM.getField(0).getConsumption(f, nt).doubleValue() / 1000.0;
final String curAsset = curUsgPt.getAsset();
String bsFolderNm = "";
boolean bsFlag = false;
for (int y = 0; y < fldrBS.size(); ++y) {
bsFolderNm = fldrBS.get(y).getName(); //The method getName() is undefined for the type Object
if (bsFolderNm.equals(curAsset)) {
bsFlag = true;
retailBS += consum3;
break;
}
}
if (!bsFlag) {
retailCS += consum3;
}
}
remBS = consumBS - retailBS;
remCS = consumCS - retailCS;
percentRemBS = remBS / (remBS + remCS) * 100.0;
percentRemCS = remCS / (remBS + remCS) * 100.0;
if (remBS == 0.0 || remCS == 0.0) {
percentRemBS = 0.0;
percentRemCS = 0.0;
}
changeRemBS = percentRemBS - prevRemBSPercent;
changeRemCS = percentRemCS - prevRemCSPercent;
}
if (!f.before(this.fromDate)) {
pw.print(String.valueOf(df.format(f)) + "," + df2.format(consumBS) + "," + df2.format(consumCS) + "," + df2.format(consumBS + consumCS) + "," + df2.format(percentBS) + "%," + df2.format(percentCS) + "%," + changeBS + "%," + changeCS + "%");
pw.print("," + cntBS + "," + cntCS + "," + (cntBS + cntCS) + "," + retailBS + "," + retailCS + "," + remBS + "," + remCS + "," + percentRemBS + "%," + percentRemCS + "%," + changeRemBS + "%," + changeRemCS + "%");
pw.println();
}
prevBSPercent = percentBS;
prevCSPercent = percentCS;
prevRemBSPercent = percentRemBS;
prevRemCSPercent = percentRemCS;
f = nt;
}
}
}
private void storeUsgPts_Prems(final Date f) {
this.usgPtStore = new Hashtable();
this.premStore = new Hashtable();
if (this.usgPt1 != null) {
final UsagePoint up = this.usgf.findByExternalName(this.usgPt1, f);
this.usgPtStore.put("usgPt1", new usgPtDetail(up, up.getPeriod()));
final Premise prem = up.getPremise();
this.premStore.put("prem1", new premDetail(prem, prem.getPeriod(), prem.getDomain()));
}
if (this.usgPt2 != null) {
final UsagePoint up = this.usgf.findByExternalName(this.usgPt2, f);
this.usgPtStore.put("usgPt2", new usgPtDetail(up, up.getPeriod()));
final Premise prem = up.getPremise();
this.premStore.put("prem2", new premDetail(prem, prem.getPeriod(), prem.getDomain()));
}
if (this.usgPt3 != null) {
final UsagePoint up = this.usgf.findByExternalName(this.usgPt3, f);
this.usgPtStore.put("usgPt3", new usgPtDetail(up, up.getPeriod()));
final Premise prem = up.getPremise();
this.premStore.put("prem3", new premDetail(prem, prem.getPeriod(), prem.getDomain()));
}
if (this.usgPt4 != null) {
final UsagePoint up = this.usgf.findByExternalName(this.usgPt4, f);
this.usgPtStore.put("usgPt4", new usgPtDetail(up, up.getPeriod()));
final Premise prem = up.getPremise();
this.premStore.put("prem4", new premDetail(prem, prem.getPeriod(), prem.getDomain()));
}
if (this.usgPt5 != null) {
final UsagePoint up = this.usgf.findByExternalName(this.usgPt5, f);
this.usgPtStore.put("usgPt5", new usgPtDetail(up, up.getPeriod()));
final Premise prem = up.getPremise();
this.premStore.put("prem5", new premDetail(prem, prem.getPeriod(), prem.getDomain()));
}
if (this.usgPt6 != null) {
final UsagePoint up = this.usgf.findByExternalName(this.usgPt6, f);
this.usgPtStore.put("usgPt6", new usgPtDetail(up, up.getPeriod()));
final Premise prem = up.getPremise();
this.premStore.put("prem6", new premDetail(prem, prem.getPeriod(), prem.getDomain()));
}
if (this.usgPt7 != null) {
final UsagePoint up = this.usgf.findByExternalName(this.usgPt7, f);
this.usgPtStore.put("usgPt7", new usgPtDetail(up, up.getPeriod()));
final Premise prem = up.getPremise();
this.premStore.put("prem7", new premDetail(prem, prem.getPeriod(), prem.getDomain()));
}
if (this.usgPt8 != null) {
final UsagePoint up = this.usgf.findByExternalName(this.usgPt8, f);
this.usgPtStore.put("usgPt8", new usgPtDetail(up, up.getPeriod()));
final Premise prem = up.getPremise();
this.premStore.put("prem8", new premDetail(prem, prem.getPeriod(), prem.getDomain()));
}
}
public List getOptionalKeys() {
final List keys = new ArrayList();
keys.add("Large customer usagepoint1");
keys.add("Large customer usagepoint2");
keys.add("Large customer usagepoint3");
keys.add("Large customer usagepoint4");
keys.add("Large customer usagepoint5");
keys.add("Large customer usagepoint6");
keys.add("Large customer usagepoint7");
keys.add("Large customer usagepoint8");
return keys;
}
public List getRequiredKeys() {
final List keys = new ArrayList();
keys.add("Version");
return keys;
}
public String getDescription() {
return "Daily LE Load";
}
public String getVersion() {
return "$Revision: 1.0 $";
}
class premDetail
{
private Premise prem;
private TimePeriod tp;
private String domain;
public premDetail(final Premise prem, final TimePeriod tp, final String domain) {
this.prem = prem;
this.tp = tp;
this.domain = domain;
}
public Premise getprem() {
return this.prem;
}
public void setpremise(final Premise prem) {
this.prem = prem;
}
public TimePeriod getperiod() {
return this.tp;
}
public void setPeriod(final TimePeriod tp) {
this.tp = tp;
}
public String getDomain() {
return this.domain;
}
public void setDomain(final String domain) {
this.domain = domain;
}
}
class usgPtDetail
{
private UsagePoint usgPt;
private TimePeriod tp;
public usgPtDetail(final UsagePoint usgPt, final TimePeriod tp) {
this.usgPt = usgPt;
this.tp = tp;
}
public UsagePoint getusgPt() {
return this.usgPt;
}
public void setusgPt(final UsagePoint usgPt) {
this.usgPt = usgPt;
}
public TimePeriod getperiod() {
return this.tp;
}
public void setPeriod(final TimePeriod tp) {
this.tp = tp;
}
}
}
因为您的列表未使用泛型(这些是在Java 5中引入的,所以您必须明确地转换get的返回值:
final Folder curDomainf = (Folder)domainList.get(a);