Avatar billede coolfisk Nybegynder
10. november 2004 - 21:22 Der er 22 kommentarer og
1 løsning

static kontra non-static

Har lavet et program... hvor der er en klasse med nogle Integer get/set metoder. Har to forskellige JSP-sider, hvor det er meningen at jeg skal hente/sætte data. Men debugeren brokker sig over: non-static variable workflow_id cannot be referenced from a static context

hvad gør jeg forkert?
Avatar billede arne_v Ekspert
10. november 2004 - 21:27 #1
Svært at sige uden at se noget kode.

Det plejer at være fordi man bruger en non static variabel i en static metode.
Avatar billede coolfisk Nybegynder
10. november 2004 - 22:03 #2
code fra den eneklasse:

public class Workflow
{
    public Integer workflow_id;
   
    public Integer getWorkflowid()
    {
    return workflow_id;
    }
   
    public void setWorkflowid(Integer w){
    workflow_id = w;
    }
   
}

kode fra anden klasse som skal hente workflowid:

import ... Workflow;

public class test
{
 
  public void gøretellerandet()
  {
      Workflow.setWorkflowid(værdi)
  }
}
Avatar billede arne_v Ekspert
10. november 2004 - 22:04 #3
Workflow.setWorkflowid(værdi)

forudsætter at setWorkflowid er en static metode !
Avatar billede arne_v Ekspert
10. november 2004 - 22:05 #4
En ikke static metode kræver:

objektaftypenWorkflow.setWorkflowid(værdi)
Avatar billede coolfisk Nybegynder
10. november 2004 - 22:05 #5
så den skal hedde:

static void setWorkflowid(Integer w){
    workflow_id = w;
    }
?
Avatar billede arne_v Ekspert
10. november 2004 - 22:07 #6
Jeg er 98% sikker på at du skal beholde nmetoden som ikke static og i.s.f. kalde
metoden på et objekt fremfor en klasse
Avatar billede coolfisk Nybegynder
10. november 2004 - 22:22 #7
Hvordan skulle det se ud... kan du vise et eksempel?
Avatar billede arne_v Ekspert
10. november 2004 - 22:24 #8
public void gøretellerandet()
  {
      Workflow wf = new Workflow();
      wf.setWorkflowid(værdi)
  }

eller

  public void gøretellerandet(Workflow wf)
  {
      wf.setWorkflowid(værdi)
  }
Avatar billede coolfisk Nybegynder
10. november 2004 - 22:44 #9
Ved ikke hvad jeg tænkte på... men mange tak... tror det er senge tid. Nu virker det troede jeg havde prøvet det, men havde åbentbart lavet en fejl. Du kan bare skrive svar
Avatar billede arne_v Ekspert
10. november 2004 - 22:45 #10
svar
Avatar billede coolfisk Nybegynder
10. november 2004 - 23:09 #11
ups.. men ved new bliver værdierne slettet?... det går ikke
Avatar billede coolfisk Nybegynder
10. november 2004 - 23:25 #12
den der kalder:
denandenklasse:

public void gøretellerandet(Workflow wf)
  {
      wf.setWorkflowid(værdi)
  }

hvad skal man kalde der???

denandenklasse.gøretellerandet(?????);
Avatar billede arne_v Ekspert
10. november 2004 - 23:33 #13
Den skal naturligvis kaldes med eninstans af Workflow
Avatar billede coolfisk Nybegynder
10. november 2004 - 23:35 #14
så som?... det er fordi jeg flere gange skal hente workflowid'et fra forskellige klasser... så data må ikke blive newet
Avatar billede arne_v Ekspert
10. november 2004 - 23:36 #15
På en eller anden måde skal de klasser jo kunne få fat i den samme Workflow.

Måske skal Workflow være en singleton ??
Avatar billede coolfisk Nybegynder
10. november 2004 - 23:37 #16
har hørt om singleton... men hvordan skulle det implemeteres?
Avatar billede arne_v Ekspert
10. november 2004 - 23:40 #17
Avatar billede arne_v Ekspert
10. november 2004 - 23:40 #18
Så vil du kunne skrive:

Workflow.getInstance().setWorkflowid(værdi)
Avatar billede coolfisk Nybegynder
10. november 2004 - 23:46 #19
Kan du lave et eksempel med hvordan denne klasse skal se ud:

public class Workflow
{
    public Integer workflow_id;
   
    public Integer getWorkflowid()
    {
    return workflow_id;
    }
   
    public void setWorkflowid(Integer w){
    workflow_id = w;
    }
   
}
Avatar billede arne_v Ekspert
10. november 2004 - 23:51 #20
public class Workflow
{
    public Integer workflow_id;

    private Workflow instance = null;

    private Workflow() {
    }

    public synchronized static Workflow getInstance() {
      if(instance == null) {
          instance = new Workflow();
      }
      return instance;
    }
 
    public Integer getWorkflowid()
    {
    return workflow_id;
    }
 
    public void setWorkflowid(Integer w){
    workflow_id = w;
    }
 
}
Avatar billede coolfisk Nybegynder
11. november 2004 - 00:12 #21
den melder fejlen:

non-static variable instance cannot be referenced from a static context
if(instance == null) {

non-static variable instance cannot be referenced from a static context
instance = new Workflow();

non-static variable instance cannot be referenced from a static context
return instance;
Avatar billede coolfisk Nybegynder
11. november 2004 - 00:35 #22
har fundet ud af det
Avatar billede arne_v Ekspert
11. november 2004 - 07:23 #23
ja instance skulle selvfølgelig være static
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester