2017-02-09 130 views
0

Class1.java非靜態的靜態方法

public List<UMRDTO> getDocumentationList(Session session) 
{ 
    List<UMRDTO> documentationList = null; 

    try 
    { 
     Query query = null; 
     query  = session.createQuery(UMRSQLInt.DOCUMENTATION_LIST); 
     documentationList = query.list(); 
    } 

    return documentationList; 
} 

我需要使用返回到一個靜態方法像非靜態方法此類似,但得到錯誤documentationList不能從靜態上下文refrenced

class2.java 

static 
{ 
UMRMetadataSupportDAOImpl d=new UMRMetadataSupportDAOImpl(); 
    listDocuments= d.getDocumentationList(); //error here 
    for (UMRDocumentationDTO listDoc: listDocuments) 
    { 
     if(listDoc.equals(MMTConstantsInt.DOMAIN_NAME)) 
      domainDocumentationMap.put(listDoc.getId().getObjectName(), listDoc.getDocumentationLink()); 
     else 
      domainComboDocumentationMap.put(listDoc.getId().getObjectName(), listDoc.getDocumentationLink()); 
    } 
+0

嗯,是的,所以你需要你的第一類的實例,以調用實例方法... –

+0

請閱讀[許多問題]的一些答案(http://stackoverflow.com/search? q =%22non-static +方法+不能+引用+從+ a + static +上下文%22)關於相同的錯誤。 –

+0

我跟着,但我不想使用我的新課程中提供的會話會話 –

回答

2

Static字段和方法都與該類相關聯。它們可以僅由類名和點運算符來調用。

Non static字段和成員鏈接到該類的instance。他們需要調用該類的一個對象。在同一個類中有一個特殊的引用,它引用了當前正在執行的對象this

類是blueprint及其實例是該藍圖的實現。當一個對象被創建時,然後在內存中分配空間。我們在對象上調用非靜態方法。

您的方法getDocumentationList是非靜態的,這意味着它需要class1的對象,以便可以在該對象上調用它。您正在使用類名稱調用它,而您需要創建一個對象,然後調用該方法。

第二種選擇是聲明getDocumentationList爲靜態。

+0

我跟着,但我不想使用我的新班級提供的會話會話 –

+0

我編輯了我的答案,如果你想調用一個沒有對象的方法,然後聲明它是靜態的 –

+0

它有幫助,我的問題和其他..你可以選擇提出幫助你理解的答案或問題,也可以選擇將答案標記爲已接受。 –