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?
Annonceindlæg fra Infor
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.
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) } }
10. november 2004 - 22:04
#3
Workflow.setWorkflowid(værdi) forudsætter at setWorkflowid er en static metode !
10. november 2004 - 22:05
#4
En ikke static metode kræver: objektaftypenWorkflow.setWorkflowid(værdi)
10. november 2004 - 22:05
#5
så den skal hedde: static void setWorkflowid(Integer w){ workflow_id = w; } ?
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
10. november 2004 - 22:22
#7
Hvordan skulle det se ud... kan du vise et eksempel?
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) }
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
10. november 2004 - 22:45
#10
svar
10. november 2004 - 23:09
#11
ups.. men ved new bliver værdierne slettet?... det går ikke
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(?????);
10. november 2004 - 23:33
#13
Den skal naturligvis kaldes med eninstans af Workflow
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
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 ??
10. november 2004 - 23:37
#16
har hørt om singleton... men hvordan skulle det implemeteres?
10. november 2004 - 23:40
#17
10. november 2004 - 23:40
#18
Så vil du kunne skrive: Workflow.getInstance().setWorkflowid(værdi)
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; } }
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; } }
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;
11. november 2004 - 00:35
#22
har fundet ud af det
11. november 2004 - 07:23
#23
ja instance skulle selvfølgelig være static
Kurser inden for grundlæggende programmering