2014-01-28 142 views
0

错误:在java中静态和非静态?

Cannot make a static reference to the non-static method setSelectedInfoRole(SelectOption) from the type 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; 
     } 

    } 

回答

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

您的问题在这一行:PeopleInfoData.setSelectedInfoRole(new SelectOption<String>(peopleInfoData.getPeopleInfoRecord().getInfoValue()))是大写'P'。您的变量名为peopleInfoData您正在尝试访问该方法,如PeopleInfoData的静态方法。

1

查看Java Language Specification, section 8.4.3.2

A static类方法意味着它是该类的一般实用方法,并非特定于该类的实际对象。除此之外,static方法不能像您的那样引用this

我希望你的意思是在该行上写peopleInfoData而不是PeopleInfoData,所以你会引用对象本身,而不是它的类。否则,在调用此方法时,Java将不知道您指的是哪个对象this

1

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