Interface Funktionales Interface lässt sich nicht implementieren.

pkm

Bekanntes Mitglied
Ich verstehe eine Sache nicht; nachdem ich den Versuch unternommen habe, ein Tutorial zu Lambdaausdrücken in JAVA zu machen,


https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html


ich habe versucht, das nachzuprogrammieren, jedoch funktioniert folgender Code nicht, da sich das Interface nicht implementieren lässt (siehe Code-Kommentar). Ich verstehe leider nicht, was ich falsch gemacht habe, kann mir eventuell bitte jemand einen Tipp geben?

Code:
package core;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import core.Person.Sex;



class Main {

public static void printTested(List<Person> roster,Tester tester) {

for (Person p : roster) {


   if(tester:test(p)){
      p.printPerson();
   }
 }
}

public static void main(String[] args) {

List<Person> roster = new ArrayList<>();

roster.add(new Person("Hannah",LocalDate.of(1980, 6, 30),Sex.FEMALE,"hannah@mail.se"));

Tester test=(p)->p.getAge()>=18;
//Hier sagt er immer: „Create local variable p!“


printTested(roster, test);

   }
}

Code:
package core;

import static java.lang.System.out;
import java.time.LocalDate;

public class Person {

  public enum Sex {
    MALE, FEMALE
}

String name;
LocalDate birthday;
Sex gender;
String emailAddress;

public Person(String nam, LocalDate ldat, Sex s, String emailAddr) {
    name=nam;
    birthday=ldat;
    gender=s;
    emailAddress=emailAddr;
}
public int getAge() {

LocalDate dateBefore=birthday;
LocalDate dateAfter=LocalDate.now();

return (int) java.time.temporal.ChronoUnit.YEARS.between(dateBefore, dateAfter);

}

public void printPerson() {

   out.println(name);
 
  }
}

Code:
package core;

public interface Tester {

  public boolean test(Person p);

}
 
Zuletzt bearbeitet:
Das sollte eher so aussehen:
Java:
static void printTested(List<Person> roster, Tester tester) {
  for (Person p : roster) {
    if (tester.test(p)){
      p.printPerson();
    }
  }
}
Ganzes Beispiel, das funktioniert:
Java:
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

interface Tester {
  boolean test(Person p);
}

public class Test {
  public static void main(String... args) {
    List<Person> roster = new ArrayList<>();
    roster.add(new Person("Hannah", LocalDate.of(1980, 6, 30), Person.Sex.FEMALE, "hannah@mail.se"));
    Tester test = (p) -> p.getAge() >= 18;
    //Hier sagt er immer: „Create local variable p!“
    printTested(roster, test);
  }
  
  static void printTested(List<Person> roster, Tester tester) {
    for (Person p : roster) {
      if (tester.test(p)) {
        p.printPerson();
      }
    }
  }
}

class Person {
  String name;
  LocalDate birthday;
  Sex gender;
  String emailAddress;
  
  public Person(String nam, LocalDate ldat, Sex s, String emailAddr) {
    name = nam;
    birthday = ldat;
    gender = s;
    emailAddress = emailAddr;
  }
  
  public int getAge() {
    LocalDate dateBefore = birthday;
    LocalDate dateAfter = LocalDate.now();
    return (int) java.time.temporal.ChronoUnit.YEARS.between(dateBefore, dateAfter);
  }
  
  public void printPerson() {
    System.out.println(name);
  }
  
  public enum Sex {
    MALE, FEMALE
  }
}
 

Zurück
Oben