错误:
无法对非静态方法进行静态引用 来自类型的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;
}
}
答案 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”就可以了。您不能对非静态方法进行静态引用(使用类名)。您需要使用该对象的实例来访问非静态方法。