Vinnaren i pepparkakshustävlingen!
2021-12-18, 17:49
  #1
Medlem
Jag har en funktion där jag inuti den uppdaterar egenskaper hos instanser av olika klasser. Vilka egenskaper och instanser som ska uppdateras är dock olika från gång till gång, och därmed hade jag behövt skicka in en referens till den specifika klassen som ska uppdateras in i funktionen, inte något variabelvärde om är vanligt. Alternativet är att copy-pastea funktionen en jävla massa gånger och byta ut referenserna inuti varje kopia, men känns som det borde gå lösa snyggare.

Är detta möjligt?
Citera
2021-12-18, 18:28
  #2
Medlem
JohannesSnajdares avatar
Definiera ett interface med de metoder som behövs, låt dina klasser implementera interfacet och använd sedan interfacet som parameter till din funktion.
Alternativt använd en (abstrakt) basklass på samma sätt.

i pseudokod:

Kod:
interface IStuff
{
   void SetSomeValue(int a);
   void SetAnotherValue(int b);
}

class A : IStuff
{
 ...
}

class B : IStuff
{
 ...
}


DoTheStuff( IStuff obj ) 
{
   obj.SetSomeValue(10);
   obj.SetAnotherValue(20);
}


A a = new A();
B b = new B();

DoTheStuff(a);
DoTheStuff(b);
Citera
2021-12-18, 19:04
  #3
Moderator
Protons avatar
Iden med ett interface är nog inte så dum, men jag tror, utifrån TS inlägg, att det bara löser halva problemet.

Det ser ju ut som om, beroende på viken referens som skickas, ska olika data i den uppdateras.

I det fallet känns det mer som om en abstrakt basklass är lösningen. Då kan man ta emot denna basklass i metoden och sedan kolla vad det var för något som skickades in. Lite pseudokod:

Kod:
public abstract class AbstractClass{

public abstract 
void doStuff1();
public abstract 
void doStuff2();
}

public class 
ExampleA extends AbstractClass{
public 
void doStuff1(){
System.out.println("stuff1");
}

public 
void doStuff2(){
System.out.println("stuff2");
}
}

public class 
ExampleB extends AbstractClass{
public 
void doStuff1(){
System.out.println("stuff1ExampleB");
}

public 
void doStuff2(){
System.out.println("stuff2ExampleB");
}
}

//mer kod
/nånstans i din kod
public void doStuffWithMyClasses(AbstractClass parameter){
if(
parameter instanceof ExampleA){
parameter.doStuff1();
}
if(
parameter instanceof ExampleB){
parameter.doStuff1();
parameter.doStuff2();
}


Nåt sånt skulle ju kanske kunna fixa problemet?
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback