2017-03-28 9 views
-1

Ich bin auf der Suche nach wie eine Methode als Parameter in Java übergeben. Jede Methode, die ich gefunden habe, passt nicht zu meinem Problem. Ich mache eine Android-Bildverarbeitungs-App und möchte jeden Verarbeitungsalgorithmus in einem Thread ausführen lassen.Übergeben einer Methode als Parameter in JAVA

Das Problem ist, jede Methode, die ich gefunden habe (Lambda, Callable) funktioniert nicht. Hier ist meine ImageProcessing-Klasse, so dass Sie die verschiedenen Prototypen sehen können.

public class ImgProcessing { 

    private static Img image; 

    public static void colorize(int chosencolor) { 
     //Stuff 
    } 

    public static void histogramEqualization() { 
     //stuff 
    } 

    public static void extendDynamism() { 
     //stuff 
    } 

    public static void toGray() { 
     //stuff 
    } 

    public static void convolution(int n, int typeFilter) { 
     //stuff 
    } 

    private static void calculConvolution(float[][] filtermatrix, int sizefilter) { 
     //stuff 
    } 

    public static void overexposure() {} 

    public static void isolate(int colorValue) { 

    } 

    public static void sepia() { 

    } 
} 

Das Ziel ist hier die Pixelmatrix in vielen Teilen als Prozessorkerne zu schneiden und ein Gewinde erstellen, die einen Teil des Arrays verarbeitet. Ich versuche, Code-Duplizierung zu vermeiden, also möchte ich eine generische Thread-Methode haben, an die ich meine Verarbeitungsmethode weitergebe.

Etwas wie:

public class Worker implements Runnable { 
    private final int numberOfIterations; 
    private final float[] x = new float[12000]; 
    Func myFunc; 

    public Worker(int numberOfIterations, Func myFunc) { 
     this.numberOfIterations = numberOfIterations; 
     this.myFunc = myFunc; 
    } 

    public void run() { 

    } 

    public void initThread{ 
     // *** Main Thread *** 
     Thread[] threads = new Thread[8]; 

     for (int i = 0; i < 8; i++) { 
      //Creating threads and calling myFunc method. 
     } 

     for (int i = 0; i < 8; i++) { 
      threads[i].join(); 
     } 
    } 
} 
+0

um eine Methode zu übergeben, benötigen Sie Java 8, die auf Android noch nicht verfügbar ist. Deklarieren Sie eine Klasse mit der gewünschten Methode und übergeben Sie eine Instanz dieser Klasse als Parameter. Dann rufe diese Methode auf. –

Antwort

1

Ich denke, man process eine Schnittstelle Klasse wie ImageProcessing mit einer Methode erstellen berücksichtigen sollte. Erstellen Sie Methoden als Klassen, die ImageProcessing erben. So myFunc wird ImageProcessing Klasse, die Sie als Klasse übergeben können Sie benötigt.

Verwandte Themen