Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht

LimDul

Top Contributor
Folgende Konstruktor-Signatur

Java:
public KlasseX(Supplier<KlasseY> klasseYSupplier, Consumer<KlasseY> klasseYConsumer);

Weiterhin gibt es eine KlasseZ mit:
Java:
public class KlasseZ() {
public KlasseY getY();
public void setY(KlasseY y);
Klassische Getter und Setter

Gegeben ist sinnbildlich folgender Code:
Java:
List<? extends KlasseZ> liste = ermittleListe();
// Variante A
liste.stream().map(z->new KlasseX(z::getY, z::setY))....
// Variante B
liste.stream().map(z->new KlasseX(()->z.getY(), y->z.setY(y)))....
Variante A kompiliert in Eclipse, aber nicht im Maven-Build
Variante B kompiliert in Eclipse, und im Maven-Build

Hääh?
 
Zuletzt bearbeitet:

httpdigest

Top Contributor
Welche Fehlermeldung bekommst du denn von Eclipse und/oder dem JDK/javac Compiler und wie sieht der tatsächlich von dir verwendete Code aus?
Ersteinmal, lass uns das Ganze mal in eine MCVE Form bringen, die keine Schreibfehler enthält und den tatsächlichen verwendeten Code nachstellt:
Java:
import java.util.*;
import java.util.function.*;
public class KlasseX {
  static class KlasseY {}
  static class KlasseZ {
    KlasseY getY() {
      return null;
    }
    void setY(KlasseY y) {}
  }
  public KlasseX(Supplier<KlasseY> klasseYSupplier, Consumer<KlasseY> klasseYConsumer) {}
  public static void main(String[] args) {
    List<? extends KlasseZ> liste = new ArrayList<>();
    // Variante A
    liste.stream().map(z -> new KlasseX(z::getY, z::setY));
    // Variante B
    liste.stream().map(z -> new KlasseX(() -> z.getY(), y -> z.setY(y)));
  }
}
Das kompiliert in Eclipse (Compiler Compliance Level = Java 11) und auch mit javac (unter Maven) mit JDK 16 EA und source/target/release = Java 11.
 

LimDul

Top Contributor
Ich muss das mal versuchen zu bereinigen und in ein minimales Beispiel zu bringen. Wir sind hier noch auf java 8 unterwegs. Ich war nicht der einzige der das Problem hatte, Kollegen in einem anderen Projekt an analoger Stelle auch. Ich hatte die Hoffnung das jemand da eine Java Spec aus dem Hut zieht.
 

LimDul

Top Contributor
Ok, minimales Beispiel:

Logikklasse (Wo der nicht kompilierende Code liegt)
Java:
package de.javaforum.test;

import java.util.Collections;
import java.util.List;

public class LogikKlasse {

    public static void main(String[] args) {

        List<? extends BeanKlasse> list = Collections.emptyList();

        list.stream().map(b -> new WrapperKlasse(b::getValueKlasse, b::setValueKlasse));
    }

}

BeanKlasse (nur getter & setter)
Java:
package de.javaforum.test;

public class BeanKlasse {

    private ValueKlasse valueKlasse;

    public ValueKlasse getValueKlasse() {
        return valueKlasse;
    }

    public void setValueKlasse(ValueKlasse valueKlasse) {
        this.valueKlasse = valueKlasse;
    }

}

ValueKlasse (Ohne Inhalt)
Java:
package de.javaforum.test;

public class ValueKlasse {

}

WrapperKlasse (die den Consumer/Supplier bekommt)
Java:
package de.javaforum.test;

import java.util.function.Consumer;
import java.util.function.Supplier;

public class WrapperKlasse {

    private Supplier<ValueKlasse> supplier;
    private Consumer<ValueKlasse> consumer;

    public WrapperKlasse(Supplier<ValueKlasse> supplier, Consumer<ValueKlasse> consumer) {
        this.supplier = supplier;
        this.consumer = consumer;
    }

}

Eclipse:
- Kompiliert
- Lässt sich ausführen

Maven:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project redacted: Compilation failure
[ERROR] /C:/Development/redacted/src/main/java/de/javaforum/test/LogikKlasse.java:[18,50] incompatible types: invalid method reference
[ERROR] getValueKlasse() in de.javaforum.test.BeanKlasse is defined in an inaccessible class or interface

Eclipse-Compliance Level: Java 1.8
Maven:
Code:
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
 

LimDul

Top Contributor
Mache ich das ? extends bei der Liste weg, kompiliert es auch in Maven. Warum? Mir sind die Probleme mit solchen Listen bzw generell dem ? extends durchaus bewusst, aber an der Stelle verstehe ich nicht warum es in Maven nicht klappt - jedes Objekt der Liste hat die Methode getY bzw. setY

Nachtrag:
Versionen
Maven: 3.3.9 und 3.5.4
Eclipse: 2019-06
JDK: openjdk version "1.8.0_212-3-redhat"
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Neumi5694 Lambda - Block vs "Anweisungsliste" Allgemeine Java-Themen 8
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
A Lambda-Ausdrücke Allgemeine Java-Themen 5
A Lambda und Streams verstehen Allgemeine Java-Themen 4
O Best Practice Lambda Expressions Allgemeine Java-Themen 3
Rudolf Compiler-Fehler Lambda als Argument kompiliert nicht Allgemeine Java-Themen 2
E Lambda filter performance Allgemeine Java-Themen 2
H Collector Generics Problem (incl. Stream & Lambda) Allgemeine Java-Themen 4
M Lambda "invalid method reference no suitable method found" Allgemeine Java-Themen 2
H Consumer (Java8 Lambda) an Timer übergeben Allgemeine Java-Themen 2
S Lambda Ausdrücke: @FunctionalInterface Instanzen auf null prüfen Allgemeine Java-Themen 9
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
N Regulären Ausdruck in normalen Java-Code umwandeln Allgemeine Java-Themen 12
N Regulärer Ausdruck funktioniert nicht Allgemeine Java-Themen 6
G JavaFX var Ausdruck Allgemeine Java-Themen 1
S Hex Ausdruck kürzen Allgemeine Java-Themen 34
L Erste Schritte Ausdruck schöner schreiben? Allgemeine Java-Themen 8
J Frage zu regulärem Ausdruck Allgemeine Java-Themen 2
H Reg Exp Ausdruck erweitern Allgemeine Java-Themen 2
W Regulärer Ausdruck für 0 oder mehr Blanks Allgemeine Java-Themen 8
M Regulärer Ausdruck Allgemeine Java-Themen 3
A Bestimmte Sonderzeichen im Regulären Ausdruck Allgemeine Java-Themen 2
R Regulärer Ausdruck Allgemeine Java-Themen 5
G Regulärer Ausdruck für 2 Wörter Allgemeine Java-Themen 3
P JFormattedTextField für durch Semikolon getrennte Integer-Werte gesucht / Regulärer Ausdruck Allgemeine Java-Themen 3
B Problem mit Regulärem Ausdruck Allgemeine Java-Themen 4
J RegEx Ausdruck Allgemeine Java-Themen 2
G RegEx- Ausdruck Allgemeine Java-Themen 4
L String Replace mit Regulärem Ausdruck Allgemeine Java-Themen 2
H Problem mit der Klasse Pattern - Regulärer Ausdruck Allgemeine Java-Themen 2
O Text mit Wildcard gegen regulären Ausdruck prüfen Allgemeine Java-Themen 3
S Regulärer Ausdruck tut überhaupt nichts Allgemeine Java-Themen 2
M Regulärer Ausdruck Allgemeine Java-Themen 6
T Ausdruck mit pdfBox macht Probleme Allgemeine Java-Themen 2
M Ausgabe in Datei zum Ausdruck Allgemeine Java-Themen 2
Iron Monkey Regulärer Ausdruck Allgemeine Java-Themen 2
T Regulärer Ausdruck Allgemeine Java-Themen 6
S Regulärer Ausdruck für HTML-Tag Allgemeine Java-Themen 18
P [Regulärer Ausdruck] Auf Gruppe mit Quantifier separat zugreifen? Allgemeine Java-Themen 2
F Problem mit regulären Ausdruck in Zusammenhang mit HTML Allgemeine Java-Themen 8
J Regulärer Ausdruck - Der Punkt und der Zeilenumbruch Allgemeine Java-Themen 6
X String zerlegen mittels regulärem Ausdruck Allgemeine Java-Themen 31
M Wertepaar in relulärem Ausdruck Allgemeine Java-Themen 15
Iron Monkey Regulärer Ausdruck Allgemeine Java-Themen 6
A Regulären Ausdruck für Funktionsnamen Allgemeine Java-Themen 4
A Regulärer Ausdruck für die Uhrzeit Allgemeine Java-Themen 3
G Regulärer Ausdruck Allgemeine Java-Themen 4
M Regulären Ausdruck negieren Allgemeine Java-Themen 6
G Frage zu Regulärem Ausdruck Allgemeine Java-Themen 2
S regex-Pattern Ausdruck negieren Allgemeine Java-Themen 2
L Passwort mit Regulärem Ausdruck prüfen Allgemeine Java-Themen 6
M Regulärer Ausdruck Allgemeine Java-Themen 3
I Composite Pattern für Ausgabe von Ausdruck Allgemeine Java-Themen 3
P Regulärer Ausdruck um sich wiederholende Zeichen zu finden. Allgemeine Java-Themen 9
M Regulärer Ausdruck mit [ und ] Allgemeine Java-Themen 9
P Problem - Regulärer Ausdruck funktioniert nicht Allgemeine Java-Themen 5
J Regulärer Ausdruck Allgemeine Java-Themen 3
N Regulärer Ausdruck Allgemeine Java-Themen 2
X problem mit regulären ausdruck Allgemeine Java-Themen 3
F Problem mit regulärem Ausdruck Allgemeine Java-Themen 6
M Regulärer Ausdruck Allgemeine Java-Themen 2
M backreference im regulären ausdruck Allgemeine Java-Themen 9
A Probleme Umwandlung Ausdruck String in double Allgemeine Java-Themen 4
B regulärer ausdruck Allgemeine Java-Themen 9
P Dateinamen mit regulärem Ausdruck testen Allgemeine Java-Themen 9
T Einfacher regulärer Ausdruck Allgemeine Java-Themen 2
A Regulärer Ausdruck EMail-Prüfung Allgemeine Java-Themen 3
N Regulärer Ausdruck Allgemeine Java-Themen 2
HolyFUT Best Practice Wie geht man mit "schlechten" Projekten um? Allgemeine Java-Themen 7
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
F 2 JsonArray vergleichen, geht es auch einfacher ? Allgemeine Java-Themen 3
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
M Test geht auf Travis und mit Github Action schief aber nicht lokal Allgemeine Java-Themen 3
M Console geht nicht auf (Windows 10) Allgemeine Java-Themen 3
W Enumeration ein Array/List als Eigenschaft mitgeben - warum geht das nicht? Allgemeine Java-Themen 0
P Erste Schritte HauptFrame geht nicht Allgemeine Java-Themen 7
L Applet Applet zu JavaWebStart migrieren - simples sample geht nicht Allgemeine Java-Themen 2
KeVoZ_ Java Mail senden - geht nicht Allgemeine Java-Themen 4
K API - Wie geht das? Allgemeine Java-Themen 2
D Klassenübergreifender Befehl geht nicht Allgemeine Java-Themen 10
X Datentypen Byte geht nicht höher als 126 auch nicht mit casten? Allgemeine Java-Themen 22
J Umwandeln von URL zu File und danach kopieren geht nicht Allgemeine Java-Themen 1
M JUnit Serverseitig? Wie geht sowas? Allgemeine Java-Themen 2
G Erste Schritte Aufgabe - Geht das auch schneller ? Allgemeine Java-Themen 7
E JavaFX String-Wert geht "verloren" - ratlos Allgemeine Java-Themen 2
B Fehler beim Auslesen von Einstellungen. Zwei ähnliche Blöcke, nur eins geht. Allgemeine Java-Themen 5
H Unicode ausgeben ohne Umwandlung - geht das? Allgemeine Java-Themen 3
F Java Anwendung Remote starten geht nicht Allgemeine Java-Themen 0
M Eingabe von Arrays geht über gewünschte Anzahl hinaus Allgemeine Java-Themen 2
K print() geht nicht ohne println() Allgemeine Java-Themen 3
V 2D-Grafik BufferdImage aus gif Datei in Jar erzeugen geht nicht. Allgemeine Java-Themen 6
Fl4sh1 Autovervollständigungfenster geht nicht (eclipse) Allgemeine Java-Themen 10
P Absatz im String / Excel / /n geht nicht Allgemeine Java-Themen 2
Z Java geht nicht im Browser Allgemeine Java-Themen 5
J Laden von JAR Files geht ohne ADMIN Rechte sehr langsam Allgemeine Java-Themen 6
B Keylistener geht nicht Allgemeine Java-Themen 9
R Wie geht man mit CachedRowSet um Allgemeine Java-Themen 2
I Downloaden einer Datei geht nicht? Allgemeine Java-Themen 16
P Input/Output Ordner löschen --> geht nicht Datei --> Ja Allgemeine Java-Themen 6
G JTable mit Keylistener geht nicht Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben