java中的静态和非静态?

时间:2014-01-28 07:27:47

标签: java static non-static

错误:

  

无法对非静态方法进行静态引用   来自类型的setSelectedInfoRole(SelectOption)   PeopleInfoViewModel.PeopleInfoData

这是代码:

    @Command
    @NotifyChange({ "peopleInfoList", "selectedFolderInfo" })
    public void encryptInfo() {
        Set selectedPeopleInfo=peopleInfoList.getSelection();
        if (selectedPeopleInfo == null) {
            showError(pageResourceBundle.getText("PLS_SELECT_AN_INFO_TO_CRYPT"));
            return;
        } 
        List<PeopleInfoRecord> folderRecord = new ArrayList<PeopleInfoRecord>();


        for (Object selectedObj : selectedPeopleInfo) {
            if (selectedObj instanceof PeopleInfoData) {
                PeopleInfoData peopleInfoData = (PeopleInfoData) selectedObj;
                ValidInfoRow validInfoRow = Services.folderService().findValidInfoByInfoCode(peopleInfoData.getPeopleInfoRecord().getInfoCode());

                if (InfoType.CHOOSE.equals(validInfoRow.getInfoType())) {
                    if (!CsdcStringUtils.isBlank(peopleInfoData.getPeopleInfoRecord().getInfoValue(), true)) {
                        PeopleInfoData.setSelectedInfoRole(new SelectOption<String>(peopleInfoData.getPeopleInfoRecord().getInfoValue()));
                    }
                }

            }
        }
    }

在上面的方法行

   PeopleInfoData.setSelectedInfoRole(new SelectOption<String>(peopleInfoData.getPeopleInfoRecord().getInfoValue()));

给出错误。

这是Pojo课程:

public class PeopleInfoData {
        private ListModelList<SelectOption<String>> infoobj;

        private PeopleInfoRecord peopleInfoRecord;
        private SelectOption<String> selectedInfoRole;


        public SelectOption<String> getSelectedInfoRole() {
            return selectedInfoRole;
        }

        public void setSelectedInfoRole(SelectOption<String> selectedInfoRole) {
            this.selectedInfoRole = selectedInfoRole;
        }

        public ListModelList<SelectOption<String>> getInfoobj() {
            return infoobj;
        }

        public void setInfoobj(ListModelList<SelectOption<String>> infoobj) {
            this.infoobj = infoobj;
        }

    }

4 个答案:

答案 0 :(得分:2)

setSelectedInfoRole()是一种non-static方法,您尝试以static方式PeopleInfoData.setSelectedInfoRole调用它,这是错误的。您需要创建该类的对象,然后调用该方法。

new PeopleInfoData().setSelectedInfoRole(new SelectOption<String>(peopleInfoData.getPeopleInfoRecord().getInfoValue()));

但看起来你已经为该类创建了一个对象。您需要使用该对象来调用此方法。

PeopleInfoData peopleInfoData = (PeopleInfoData) selectedObj;
peopleInfoData.setSelectedInfoRole(new SelectOption<String>(peopleInfoData.getPeopleInfoRecord().getInfoValue()));

答案 1 :(得分:1)

你的问题在这一行:PeopleInfoData.setSelectedInfoRole(new SelectOption<String>(peopleInfoData.getPeopleInfoRecord().getInfoValue()))是首都'P'。您的变量名为peopleInfoData您尝试访问该方法,就像它是PeopleInfoData的静态方法一样。

答案 2 :(得分:1)

请参阅Java Language Specification, section 8.4.3.2

static类方法意味着它是该类的通用实用方法,并不特定于该类的实际对象。 static方法除其他外,不能像你的那样引用this

我希望您打算在该行而不是peopleInfoData上编写PeopleInfoData,因此您将引用该对象本身,而不是其类。否则,当调用此方法时,Java将不知道您指的是哪个对象this

答案 3 :(得分:1)

您正在使用类名而不是变量名。只需使用小写的“p”就可以了。您不能对非静态方法进行静态引用(使用类名)。您需要使用该对象的实例来访问非静态方法。