[英]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
。
static
类方法意味着它是该类的通用实用程序方法,并不特定于该类的实际对象。 除其他事项外, static
方法无法像您一样引用this
。
我希望您打算在那一行上写peopleInfoData
而不是PeopleInfoData
,所以您将引用对象本身,而不是其类。 否则,Java将知道哪个对象this
你指的是当这个方法被调用。
您使用的是类名而不是变量名。 只需使用小写的“ p”,就可以了。 您不能对非静态方法进行静态引用(使用类名)。 您需要使用该对象的实例来访问非静态方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.