Compiler-Fehler Methoden-Referenz

mirjam

Mitglied
Ich möchte das, was ich unter 1. mit Lambda geschrieben habe als 2. eine Methodenreferenz verwenden. Leider kompliert dies nicht. Wie schreibt man dies richtig?

Als Compiler-Meldung kommt: Cannot make a static reference to the non-static method repl(Object, Object, Object) from the type Replacer

Java:
@FunctionalInterface
interface Replacer<S>{
    S repl(S s1, S s2, S s3);
}
public class MethodenReferenz {

    public static void main(String[] args) {
        //1. mit Lambda
        Replacer<String> repl = (s, cs1, cs2) -> s.replace(cs1, cs2);
        System.out.println("repl: " + repl.repl("xxxTest", "x", "y"));
    
        //2. mit Methodenreferenz
        Replacer<String> repl2 = Replacer::repl;
        System.out.println("repl2: " + repl2.repl("xxxTest", "x", "y"));
    }

}
 
Zuletzt bearbeitet von einem Moderator:

Flown

Administrator
Mitarbeiter
Bei Methodenreferenzen sollte man schon auf eine vorhandene Methode referenzieren - wie der Name schon vermuten lässt:
Java:
public class Test {
 
  public static void main(String... args) {
    // 1. mit Lambda
    Replacer<String> repl = (s, cs1, cs2) -> s.replace(cs1, cs2);
    System.out.println("repl: " + repl.repl("xxxTest", "x", "y"));
  
    // 2. mit Methodenreferenz
    Replacer<String> repl2 = Test::repl;
    System.out.println("repl2: " + repl2.repl("xxxTest", "x", "y"));

    // 3. mit Methodenreferenz einer Instanz
    String stringToReplace = "xxxTest";
    BiFunction<String, String, String> repl3 = stringToReplace::replace;
    System.out.println("repl3: " + repl3.apply("x", "y"));
  }
 
  private static String repl(String s1, String s2, String s3) {
    return s1.replace(s2, s3);
  }
}

@FunctionalInterface
interface Replacer<S> {
  S repl(S s1, S s2, S s3);
}
 

Ls72

Neues Mitglied
Ein weiteres Compilerproblem pass sehr zu zum Threadname:
The method fromF(L, Callable<T>, BiFunc<L,Callable<T>,R>) in the type Base<I> is not applicable for the arguments (L, this::method1,
M::new)

Java:
@FunctionalInterface
interface BiFunc<T,U,R>{ public R apply( T t, U u) throws Exception; }

class L
{
    void start() {};
    void stop() {};
};

class Base <P>
{
    final L c;
    final P p;
    public Base( final L a, final Callable<P> ctr) throws Exception
    {
        c=a; p=from(c,ctr);
    }
   
    public static <T> T from( final L c, final Callable<T> r) throws Exception
    {
        c.start();
        T t= r.call();
        c.stop();
        return t;
    }
   
    public static <T,R> R fromF ( final L l, final Callable<T> r, BiFunc<L,Callable<T>,R> mc ) throws Exception
    {
        return mc.apply(l, r);
    }
}

interface I { }

class M extends Base<I> implements I
{
    public M(final L c, final Callable<I> ctr) throws Exception
    {
      super(c,ctr);   
    }
}

class A
{
    I method1() throws Exception { return null; }
    I foo1(final L c) throws Exception {    return M.from(c, ()->method1()); }
    I foo2(final L c) throws Exception {    return M.from(c, this::method1); }
    I wrap0(final L c) throws Exception { return new M(c, ()->method1()); }
    I wrap1(final L c) throws Exception { return new M(c, this::method1); }
    I wrap2(final L c) throws Exception
    {
        BiFunc<L,Callable<I>,M> f = M::new;
        return M.fromF(c, this::method1, f);
    }
    I wrap3(final L c) throws Exception { return M.fromF(c, this::method1, M::new);    }
   
}

A.wrap2 wird kompiliert, A.wrap3 aber nicht. Kann mir jemand ein Paar Tipps geben ?
 

Ls72

Neues Mitglied
Also vorletzte Zeile wäre dann als A.wrap3 gemeint. "A" ist halt eine Klasse, wrap3 eine Klassenfunktion.
Wer ausprobieren möchte : im Codesnippet fehlt
Java:
import java.util.concurrent.Callable;
am Anfang
Das Problem ist auf Eclipse zurückzuführen : zeigt eine Fehlerstelle wo keine ist.
Kommandozeile JDK kompiliert ohne Fehler.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
LimDul Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht Allgemeine Java-Themen 8
B Leere vererbte Interface-Methoden Allgemeine Java-Themen 8
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
Encera Unterschied zweier "toString"-Methoden Allgemeine Java-Themen 1
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
B Arrays von Methoden möglich? Allgemeine Java-Themen 44
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
N abstracte klassen methoden Allgemeine Java-Themen 32
G Methoden für die Zukunft sinnvoll? Allgemeine Java-Themen 4
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
B Methoden Java Getter und Setter Methoden Allgemeine Java-Themen 9
Y Java Methoden unterschiedliche Zahlenreihen Allgemeine Java-Themen 2
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
F Sich automatisch aufrufende Java-Methoden Allgemeine Java-Themen 2
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
D Methoden Methoden anpassen und fehlende Funktionen hinzufügen Allgemeine Java-Themen 475
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
R Statistische Methoden (Mathematik) Aufgabe Allgemeine Java-Themen 9
X Brüche kürzen mittels Methoden und ggT Allgemeine Java-Themen 15
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
L mehrere Methoden Allgemeine Java-Themen 19
KeexZDeveoper Zugriff auf Methoden vom Server Allgemeine Java-Themen 7
B StAX Parser - mehrere Methoden, ein XML Allgemeine Java-Themen 4
F Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen Allgemeine Java-Themen 4
A Automatisches Methoden Laufzeiten logging? Allgemeine Java-Themen 7
M Quellcode von Java-Methoden Allgemeine Java-Themen 9
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
N HashMap und Methoden richtig einbinden Allgemeine Java-Themen 2
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
Q-bert Methoden Methoden in Java Allgemeine Java-Themen 13
D Methoden Java-Aufgabe Allgemeine Java-Themen 2
X Threads Externe Variablen in Run Methoden verändern Allgemeine Java-Themen 4
S 2 methoden mit gleichen namen und ein Interface Allgemeine Java-Themen 9
F Enum-werte als Methoden-Parameter übergeben Allgemeine Java-Themen 6
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
E OOP Objekte und Methoden Allgemeine Java-Themen 1
K Java ruft Methoden nicht der Reihe nach auf Allgemeine Java-Themen 14
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
T Java Array in Methoden Allgemeine Java-Themen 1
D Code für bereitgestellte Methoden Allgemeine Java-Themen 1
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
R Signatur von Methoden in eine Datei schreiben? Allgemeine Java-Themen 4
A Methoden verändern Allgemeine Java-Themen 12
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
J Best Practice Testen von protected Methoden Allgemeine Java-Themen 7
L Methoden "Schiffe versenken" Quellcode in Methoden umwandeln Allgemeine Java-Themen 6
G Matrix reduzieren zwei Methoden Allgemeine Java-Themen 2
Sogomn Best Practice "Doppelte" Methoden Allgemeine Java-Themen 3
Paul15 String Methoden Allgemeine Java-Themen 7
G Methoden BMI -Wert Aufgabe(Methoden) Allgemeine Java-Themen 4
F Testen von Methoden Allgemeine Java-Themen 3
S "Vererben" statischer Felder/Methoden Allgemeine Java-Themen 4
F Methoden in der Enumeration Klasse Allgemeine Java-Themen 1
S Methoden ohne Methodenkopf ?! Allgemeine Java-Themen 5
T Überschreiben von Methoden Allgemeine Java-Themen 6
M Methoden werden in falscher Reihenfolge bearbeitet Allgemeine Java-Themen 10
S Methoden Methoden überschreiben Allgemeine Java-Themen 3
N Threads statische Methoden in Threads Allgemeine Java-Themen 5
O Java-Obfuscator, welcher einzelne Methoden, Klassen und Ordnerstrukturen ausnehmen kann. Allgemeine Java-Themen 1
A also definition von klassen und string methoden und algorithmik Allgemeine Java-Themen 13
X Eigene Annotation - mit Bedingung für ganze Klassen oder Methoden Allgemeine Java-Themen 2
A Threads Lock über mehrere Abschnitte in verschiedenen Methoden Allgemeine Java-Themen 5
S Methoden Frage Allgemeine Java-Themen 2
R Wie kann man diese Methoden in arrays etablieren? Allgemeine Java-Themen 8
M Methoden in Rescources speichern Allgemeine Java-Themen 4
G Synchronisation nicht statischer Methoden Allgemeine Java-Themen 4
A Vererbung finale Methoden überschreiben Allgemeine Java-Themen 24
A Methoden parallelisieren? Allgemeine Java-Themen 2
L Methoden methoden an generischen klassentyp anpassen Allgemeine Java-Themen 5
C Methoden Übernahme von standart nativen Methoden? Allgemeine Java-Themen 9
B Zusammenfassen verschiedener ähnlicher Methoden Allgemeine Java-Themen 8
K JNI: Methoden aus unterschiedlichen Threads aufrufen Allgemeine Java-Themen 3
P Unterschiedliche Clone- Methoden Allgemeine Java-Themen 5
MQue Spezialfrage Überschreiben von Methoden Allgemeine Java-Themen 14
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
MiMa Rekursive Methoden Allgemeine Java-Themen 3
S Programm das alle aufgerufenen Methoden ausgibt..? Allgemeine Java-Themen 6
F ListIterator (next & previous methoden) Allgemeine Java-Themen 5
W Frage zu Refactoring statischer Methoden Allgemeine Java-Themen 4
M Methoden/Klassen für andere Projekte Allgemeine Java-Themen 4
T Methoden per String-Namen aufrufen Allgemeine Java-Themen 2
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
M Methoden Static Methoden und Thread??? Allgemeine Java-Themen 4
A Methoden ohne Referenzen finden Allgemeine Java-Themen 9
turmaline OOP zwei gleiche Methoden mit kleinen Unterschieden Allgemeine Java-Themen 15
G JUnit Test Methoden in anderen Thread verlagern Allgemeine Java-Themen 4
K Auf Methoden der Runnable Klasse zugreifen Allgemeine Java-Themen 2
S Methoden Class.forName() >> Methoden - Reihenfolge Allgemeine Java-Themen 5
D Passende Name für Methoden finden Allgemeine Java-Themen 3
D Wann sollte ich statische Methoden und Variablen benutzen? Allgemeine Java-Themen 44
A Methoden laufen im Konstruktor, außerhalb allerdings nicht Allgemeine Java-Themen 2
M Generische Methoden mit Java und globale Variablen Allgemeine Java-Themen 9
GianaSisters ArrayList in Methoden übergeben Allgemeine Java-Themen 3
S static methoden Allgemeine Java-Themen 9
J coole Methoden Allgemeine Java-Themen 6
R Methoden in einem Thread unterschiedlich oft ausführen Allgemeine Java-Themen 4
A OOP: Überschreiben/Implementierung von Methoden Allgemeine Java-Themen 5
P Methoden und Werte Allgemeine Java-Themen 17
E Performace/Ausführungszeit von Methoden ermitteln Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben