繁体   English   中英

Java中的静态和非静态? [重复]

[英]Static and non static in java? [duplicate]

这个问题已经在这里有了答案:

错误:

无法从PeopleInfoViewModel.PeopleInfoData类型静态引用非静态方法setSelectedInfoRole(SelectOption)

这是代码:

    @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;
        }

    }

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()));

您在此行中的问题: PeopleInfoData.setSelectedInfoRole(new SelectOption<String>(peopleInfoData.getPeopleInfoRecord().getInfoValue()))是大写PeopleInfoData.setSelectedInfoRole(new SelectOption<String>(peopleInfoData.getPeopleInfoRecord().getInfoValue())) 'P'。 您的变量称为peopleInfoData您正在尝试访问该方法,就像它是PeopleInfoData的静态方法PeopleInfoData

参见Java语言规范的第8.4.3.2节

static类方法意味着它是该类的通用实用程序方法,并不特定于该类的实际对象。 除其他事项外, static方法无法像您一样引用this

我希望您打算在那一行上写peopleInfoData而不是PeopleInfoData ,所以您将引用对象本身,而不是其类。 否则,Java将知道哪个对象this你指的是当这个方法被调用。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM