2017-07-12 3 views
1

Ich versuche, eine Methode meiner selbst erstellten "Filter" -Klasse aufzurufen, aber der Compiler kann die Methode nicht finden.Java kann Methode der Klasse nicht finden

Es ist ein bisschen schwierig, weil ich meinen Code in Eclipse schreibe, wo alles in Ordnung scheint. Aber ich muss meinen Code in eine andere Software kopieren und dort auch kompilieren. Dieser Compiler kann meine Methode dagegen nicht finden.

Ich gehe davon aus, dass der Eclipse-Compiler möglicherweise mehr Fehler "erlaubt", von denen ich nicht einmal weiß. Der andere Compiler kämpft jedoch mit ihnen.

Hier ist, was die „anderen“ Compiler druckt als Fehlercode:

C:\Program Files\Enomic\enomic-server\data\rules\testcompileboehmch\CodeTest.java:77: error: cannot find symbol filt.setHasRemoved(true); 
symbol: method setHasRemoved(boolean) 
location: variable filt of type tms.Filter 

Ich habe keine Ahnung, warum meine Klasse nicht korrekt ist. Wie oben in Eclipse gesagt, funktioniert alles gut.

Die Codetest-Klasse (Schnitt zum wichtigen Teil nach unten):

package tms; 

import tms.Filter; 
import java.util.*; 

    Filter filt = new Filter(); 
    filt.setHasRemoved(true);//cannot be found 

Meine Filterklasse:

package tms; 

import java.util.ArrayList; 
import java.util.List; 

public class Filter { 

private List<Object> remainingList; 
private List<Object> removedList; 
private Object typ; 
private boolean hasRemoved; 

public Filter() 
{ 
    this.remainingList = new ArrayList<Object>(); 
    this.removedList = new ArrayList<Object>(); 
    this.typ = new Object(); 
    this.hasRemoved = false; 
} 
public Filter(List<Object> remaining, List<Object> removed, Object typ, boolean hasRemoved) 
{ 
    this.remainingList = new ArrayList<>(); 
    if(remaining != null) 
    { 
     this.remainingList.addAll(remaining); 
    } 
    this.removedList = new ArrayList<>(); 
    if(removed != null) 
    { 
     this.removedList.addAll(removed); 
    } 
    this.typ = typ; 
    this.hasRemoved = hasRemoved; 
} 

//Set-Methoden  
public void setRemainingList(List<Object> list) 
{ 
    this.remainingList.clear(); 
    this.remainingList.addAll(list); 
} 
public void setRemovedList(List<Object> list) 
{ 
    this.removedList.clear(); 
    this.removedList.addAll(list); 
} 
public void setTyp(Object val) 
{ 
    this.typ = val; 
} 
public void setHasRemoved(boolean val) 
{ 
    this.hasRemoved = val; 
} 

//Get-Methoden 
public List<Object> getRemainingList() 
{ 
    return this.remainingList; 
} 
public List<Object> getRemovedList() 
{ 
    return this.removedList; 
} 
public Object getTyp() 
{ 
    return this.typ; 
} 
public boolean getHasRemoved() 
{ 
    return this.hasRemoved; 
} 
} 

Ich weiß wirklich nicht, warum das nicht funktioniert. Gibt es einen Fehler, den ich nicht sehen kann?

+1

Überprüfen Sie Ihre Importe. –

+1

Verwenden Sie die richtige 'Filter' Klasse? Z.B. ist der Import korrekt? Haben Sie 'Filter' definitiv neu kompiliert, seit Sie diese Methoden hinzugefügt haben? –

+0

Haben Sie zwei Klassenversionen in Ihrem Klassenpfad? –

Antwort

1

hier:

C:\Program Files\Enomic\enomic-server\data\rules\testcompileboehmch\CodeTest.java:77: error: cannot find

Und

package tms; 

Der Punkt ist: Die Java-Compiler erwartet, dass die Ordner Struktur der Paket Struktur ähnelt.

Also Ihr Problem ist, dass Ihre Klassen nicht in einem Verzeichnis namens tms existieren.

Es ist ziemlich seltsam, dass Eclipse auch hier funktioniert. In diesem Sinne: Sie möchten zum Beispiel here oder there lesen.

Und nein, es gibt nur sehr wenige subtile Dinge, wo der Eclipse Java Compiler anders als andere Produkte funktioniert. Seien Sie versichert: Chancen, dass Sie als Neuling auf solche Dinge stoßen, sind sehr nahe bei Null. Ihre Probleme werden dadurch verursacht, dass Sie nicht verstehen, wie Java-Dateien kompiliert werden. (Das ist der Nachteil, wenn Sie anfangen, die Programmierung mit einer IDE wie Eclipse zu lernen - die IDE verbirgt viele dieser Dinge vor Ihnen. Und dann, wenn Sie es brauchen - Sie haben keine Ahnung, was vor sich geht).

+0

Ich denke, der einzige Grund, dass die Initialisierung des Filters funktioniert, ist, weil eine andere Filterklasse gefunden und stattdessen verwendet wird? Und nicht die, die ich gemacht habe? Oder warum kann ich den Filter noch initialisieren, kann aber seine Methoden nicht verwenden? (Angenommen, sie sind alle korrekt, was meine Hauptfrage war) – Acro

+0

Und in Betracht ziehen, die Kommentare zu löschen, die jetzt sinnlos sind. – GhostCat

1

Durch Umbenennen meiner Filterklasse konnte ich das Problem lösen. Es sieht so aus, als hätte der Compiler nie genau gewusst, auf welche Klasse ich mich bezog. Trotzdem danke für die Hilfe, Sie haben mich in die richtige Richtung geleitet.

Hinweis für mich selbst (und vielleicht auch andere): Kommen Sie mit Ihren eigenen Klassennamen!

+0

Gut. Freut mich, dass du irgendwie eine Antwort gefunden hast. Fühlen Sie sich frei, Upvoting zu üben, sobald Sie dieses Level erreicht haben. – GhostCat

Verwandte Themen