samedi 10 novembre 2018

Functional class design Java 8

I would like to make more of an effort to use Java 8's functional features and shift my thinking towards that paradigm; however, I'm not quite sure how to reconcile class design.

For example I recently wrote something similar to this:

public class ExampleClass {

    private ExampleData exampleData;
    private Function<ExampleData, Boolean> workFunction;

    public ExampleData getExampeData() {
        return exampleData;
    }

    public void setExampleData(ExampleData exampleData) {
        this.exampleData = exampleData;
    }

    public Function<ExampleData, Boolean> getWorkFunction() {
        return workFunction;
    }

    public void setWorkFunction(Function<ExampleData, Boolean> workFunction) {
        this.workFunction = workFunction;
    }
}

then I proceed to use it like so...

public class Worker {

    private final ExampleClass exampleClass;

    public Worker(ExampleClass exampleClass) {
        this.exampleClass = exampleClass;
    }

    public void start() {
        final Boolean result = exampleClass.getWorkFunction().apply(exampleClass.getExampleData());
        if (result) {
            ...
        }
        ...
    }
}

Would something like the above be preferred over what I would consider the more traditional approach?

public class ExampleClass {

    private ExampleData exampleData;

    public ExampleClass(ExampleData exampleData) {
        this.exampleData = exampleData;
    }

    public Boolean work() {
          return doSomething(exampleData);
    }
}

and the implementing class...

public class Worker {

    private final ExampleClass exampleClass;

    public Worker(ExampleClass exampleClass) {
        this.exampleClass = exampleClass;
    }

    public void start() {
        if (exampleClass.work()) {
            ...
        }
        ...
    }
}

If I'm completely off base, what would be a proper functional solution using Java 8?

Aucun commentaire:

Enregistrer un commentaire