这是对(Managed-Bean best practice)的扩展。我编写了一个AppProperty类,它定义了Class中的各个项目:

public class AppProperties implements Serializable {

    private static final long serialVersionUID = 1L;
        //contents of AppProperties Object
        private String appRepID;
        private String helpRepID;
        private String ruleRepID;
        private String filePath;
        private Vector formNames;
        //end content
        private Session s;
        private String serverName;

        public String getAppRepID() {
            return appRepID;
        }
        public void setAppRepID(String appRepID) {
            this.appRepID = appRepID;
        }
//rest if getters and setters
}


在我的bean中,我有以下内容:

import ca.wfsystems.core.AppProperties;

private final Map<String, AppProperties> internalMap = new HashMap<String, AppProperties>();

    public ApplicationMap() {
        this.buildMap(internalMap);
    }

    private void buildMap(Map<String, AppProperties> theMap) {

        try{
            AppProperties ap = null;
            Session s = ExtLibUtil.getCurrentSession();
            vwApps = s.getCurrentDatabase().getView("vwWFSApplications");
            veCol = vwApps.getAllEntries();
            ve = veCol.getFirstEntry();
            tVE = null;
            while (ve != null){
                Vector colVal = ve.getColumnValues();
                String tAppRepID = colVal.get(2).toString();
                ap.setAppRepID(colVal.get(2).toString());
                ap.setHelpRepID(colVal.get(3).toString());
                ap.setRuleRepID(colVal.get(4).toString());

                theMap.put(colVal.get(0).toString(), ap);
            }
        }catch(Exception e){
            System.out.println(e.toString());
        }finally{
            Utils.recycleObjects(s,vwApps);
        }
    }


除了ap.setAppRepID(colVal(2).toString())之外,其他一切似乎都正常,出现了编译器错误,即“空指针访问变量ap只能在此处为null” setAppRepID和setHelpRepID的代码相同并且setHelpRepID或setRuleRepID都没有编译器错误。我不确定问题是否出在设置AppProperties ap = null尝试创建AppProperties ap = new AppProperties,但它不是那样的。我想我真的很接近完成这项工作,但是....

感谢所有在我攀登JAVA坡道时对我非常耐心的人。

最佳答案

编译器错误是正确的,此时您的变量ap只能为null。
遵循以下各条陈述

AppProperties ap = null;




ap.setAppRepID(colVal.get(2).toString());


而且在任何情况下都不会将其初始化为对象,它仍然为null。

您还会在setHelpRepID或setRuleRepID上看到编译器错误,但是它不会打扰您,因为第一条语句已经存在问题。您可以通过注释掉setAppRepID行来尝试此操作,并且在下一行应看到相同的错误。

在您的AppProperties类中创建一个公共构造函数

public AppProperties() {};


然后尝试改变

AppProperties ap = null;




AppProperties ap = new AppProperties();

关于java - 托管 bean 最佳实践的补充,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24746448/

10-11 08:17