2017-02-09 164 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

它有帮助,我的问题和其他..你可以选择提出帮助你理解的答案或问题,也可以选择将答案标记为已接受。 –