Java Kompilieren über Package grenzen hinaus

mato37

Mitglied
Guten Tag Liebes Forum,

Ich nehme gerade an einem Modul in der uni teil, in dem wir an einem Github dokument arbeiten.
Mit der Push und Pull Sache komme ich ganz gut zu rande, jedoch habe ich mit den Packages probleme.

Und zwar bleibt mir der Kompilierer einfach nicht in dem Programm wo ich ihn haben will, sondern geht in andere Files (anderer Packages) und beschwert sich dort über Fehler.

Es wäre wirklich cool, wenn ihr mir helfen könntet das er nur in den Files bleibt in denen ich es auch will.

Hier der betroffene Code:

[CODE lang="java" title="main Methode"]package uebung6;

public class RunTransportSimulator {

public static void main(String[] args) {

Elevator elev = new Elevator("Paternosta", 0 );

System.out.println(elev.getName());

}

}[/CODE]

[CODE lang="java" title="Elevator Klasse"]package uebung6;

class Elevator implements CanMoveVertically {

private double z;
private String name;
private double speed;

Elevator(String name, double z) {
this.name = name ;
this.z = z ;
this.speed = 0 ;
}

@Override
String getName(){
return this.name;
}

@Override
void changeVerticalSpeed(double deltaSpeed){
this.speed += deltaSpeed;
}

@Override
void move() {
this.z += this.speed ;
}

@Override
String toString(){
return this.name + " (elevator) is height " + this.z;
}

}[/CODE]

[CODE lang="java" title="CanMoveVertically"]package uebung6;

public interface CanMoveVertically extends Movable{

void changeVerticalSpeed(double deltaSpeed);

}[/CODE]

[CODE lang="java" title="Movable Interface"]package uebung6;

public interface Movable {

void move();
String getName();

}[/CODE]

Nun springt er in folgendes File in einem anderem Package und gibt folgende Fehlermeldung aus:

[CODE lang="java" title="Babybug"]package gridworld.framework.actor;

public class BabyBug extends DisposableBug {
private int flowersEaten = 0;

public BabyBug() {
this.setColor(Color.YELLOW);
}

@Override
public void act() {
super.act();
eatFlowerAhead();
if (flowersEaten >= 3) {
Location loc = this.getLocation();
Grid gr = this.getGrid();
this.removeSelfFromGrid();
if (Math.random() <= 0.5) {
DisposableBug bug = new DisposableBug();
bug.putSelfInGrid(gr, loc);
} else {
Breeder breeder = new Breeder();
breeder.putSelfInGrid(gr, loc);
}
}
}

@Override
public void move() {
Grid<Actor> gr = getGrid();
if (gr == null)
return;
Location loc = getLocation();
Location next =
loc.getAdjacentLocation(getDirection());
if (gr.isValid(next))
moveTo(next);
else
removeSelfFromGrid();
}

private void eatFlowerAhead() {
Grid<Actor> gr = getGrid();
if (gr == null)
return;
Location loc = getLocation();
Location next =
loc.getAdjacentLocation(getDirection());
if (!gr.isValid(next))
return;
Actor neighbor = gr.get(next);
if (neighbor instanceof Flower) {
neighbor.removeSelfFromGrid();
flowersEaten++;
}
}
}[/CODE]

Fehlermeldung
C:\Users\Malte\IdeaProjects\Uebung\src\main\java\gridworld\framework\actor\BabyBug.java:6:23
java: cannot find symbol
symbol: variable Color
location: class gridworld.framework.actor.BabyBug


Ich freue mich sehr über eure Hilfe!
VG Malte
 
Also Packages sind nur eine Strukturierung. Das sind keine Grenzen was die Übersetzung des Codes angeht,

Dazu dienen in den Entwicklungsumgebungen die Projekte. Du kannst dann Projekte einzelnd und unabhängig voneinander übersetzen. (Das trifft natürlich nicht zu, wenn Abhängigkeiten direkt zum anderen Projekt definiert wurden.)

Wie das dann genau aussieht, ist abhängig von Build Tool / Entwicklungsumgebung.
 
Also kompiliert er immernoch die dateien aus den anderen Packages mit und beschwert sich dann weil dort etwas fehlerhaft ist?
einiges ist ja auch public ... ist dann ja nur logisch, wenn er außerhalb der Packages geht
 
Ja, er übersetzt immer das ganze Projekt.

Also die Gliederung sind in der Regel Projekte. Die sollten also als Ganzes übersetzbar sein.

In einem Projekt können mehrere Packages sein. Das spielt aber für die Auswertung der Dateien, die übersetzt werden sollen, keine Rolle. Aber ja: Es wird in der Regel immer das ganze Projekt übersetzt. Wenn Du das nicht willst (weil die Dateien auch voneinander unabhängig sind), dann teil es in mehrere Projekte auf. dann kannst Du es auch unabhängig voneinander übersetzen.
 
C:\Users\Malte\IdeaProjects\Uebung\src\main\java\gridworld\framework\actor\BabyBug.java:6:23
java: cannot find symbol
symbol: variable Color
location: class gridworld.framework.actor.BabyBug
Die Fehlermeldung ist doch recht klar: der Compiler kann Color nicht finden, das in BabyBug.java, Zeile 6, verwendet wird. Es könnte zum Beispiel sein, dass an der Stelle die Klasse Color aus dem Standardpaket java.awt verwendet werden soll. Das muss man dem Compiler sagen, indem man entweder den fully qualified name (java.awt.Color) statt dem einfachen Namen (Color) verwendet oder - und das ist die Regel - in der entsprechenden Datei die Klasse importiert. D. h. in BabyBug.java würde dann einfach ein import java.awt.Color; fehlen.
 

Zurück
Oben