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

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in