在非常老的Java代码中获得类型转换错误[关闭]

问题描述 投票:-1回答:1

下面(很旧)的代码作为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 classcastexception
1个回答
0
投票

因为您的列表未使用泛型(这些是在Java 5中引入的,所以您必须明确地转换get的返回值:

final Folder curDomainf = (Folder)domainList.get(a);
© www.soinside.com 2019 - 2024. All rights reserved.