Java:类在包中没有找到对方(工厂设计模式)
Java: Classes do not find each other in package (factory design pattern)
我有三个不同的 classes:
Woman.java
package human;
public class Woman extends Human{
private final String pnr;
private final String namn;
public Woman(String n, String p){
namn = n;
pnr = p;
}
public String toString(){
return "My name is "+namn+" and I am a woman.";
}
}
Man.java
package human;
public class Man extends Human{
private final String pnr;
private final String namn;
public Man(String n, String p){
namn = n;
pnr = p;
}
public String toString(){
return "My name is "+namn+" and I am a man.";
}
}
Human.java
package human;
public abstract class Human{
public static Human create(String namn, String pnr){
char nastsist_char = pnr.charAt(9); // takes second last char in pnr
String nastsist_string = Character.toString(nastsist_char);
float siffra = Float.parseFloat(nastsist_string); //Converts to float
if ((siffra % 2) == 0){ //Checks if even
return new Man(namn, pnr);
}
else{
return new Woman(namn, pnr);
}
}
}
当我尝试编译文件 Human.java 时,出现错误
cannot find symbol: class Man,
和
cannot find symbol: class Woman.
当我尝试编译文件 Man.java 或 Woman.java 时,出现错误
cannot find symbol: class Human.
public/private
class 可见性的改变没有帮助。所有文件都位于名为 human
.
的目录中
这里有什么问题?
我应该补充一点,我要实现的目标是拥有一个无法实例化的抽象 class Human,并且在那个 class 我想要一个创建方法returns 个男人或女人的实例取决于 pnr
。此外,我不希望 Man 或 Woman 可以通过 create 方法之外的任何其他方式进行实例化。
谢谢
你自己编译它们,在终端或什么的?
然后尝试将所有文件一起编译:
javac Man.java Woman.java Human.java
你的代码和打包都没有问题,所以问题出在其他地方。你如何编译?我猜你可能正在做
javac human/Human.java
这将不起作用,因为 Man
和 Woman
不在类路径中,因此在 Human
上工作时 Java 编译器不知道。编译时应该包括这些:
javac human/*.java
干杯,
您在 class 中有周期。所以你有两个选择。
1)一起编译
2) 创建一个新的 class 例如在那里工厂和实例化对象
在你的代码中创建循环从来都不是一个好主意
您是否尝试过:javac *.java
在您的文件夹中?
Java: How can I compile an entire directory structure of code ?
我有三个不同的 classes:
Woman.java
package human;
public class Woman extends Human{
private final String pnr;
private final String namn;
public Woman(String n, String p){
namn = n;
pnr = p;
}
public String toString(){
return "My name is "+namn+" and I am a woman.";
}
}
Man.java
package human;
public class Man extends Human{
private final String pnr;
private final String namn;
public Man(String n, String p){
namn = n;
pnr = p;
}
public String toString(){
return "My name is "+namn+" and I am a man.";
}
}
Human.java
package human;
public abstract class Human{
public static Human create(String namn, String pnr){
char nastsist_char = pnr.charAt(9); // takes second last char in pnr
String nastsist_string = Character.toString(nastsist_char);
float siffra = Float.parseFloat(nastsist_string); //Converts to float
if ((siffra % 2) == 0){ //Checks if even
return new Man(namn, pnr);
}
else{
return new Woman(namn, pnr);
}
}
}
当我尝试编译文件 Human.java 时,出现错误
cannot find symbol: class Man,
和
cannot find symbol: class Woman.
当我尝试编译文件 Man.java 或 Woman.java 时,出现错误
cannot find symbol: class Human.
public/private
class 可见性的改变没有帮助。所有文件都位于名为 human
.
这里有什么问题?
我应该补充一点,我要实现的目标是拥有一个无法实例化的抽象 class Human,并且在那个 class 我想要一个创建方法returns 个男人或女人的实例取决于 pnr
。此外,我不希望 Man 或 Woman 可以通过 create 方法之外的任何其他方式进行实例化。
谢谢
你自己编译它们,在终端或什么的? 然后尝试将所有文件一起编译:
javac Man.java Woman.java Human.java
你的代码和打包都没有问题,所以问题出在其他地方。你如何编译?我猜你可能正在做
javac human/Human.java
这将不起作用,因为 Man
和 Woman
不在类路径中,因此在 Human
上工作时 Java 编译器不知道。编译时应该包括这些:
javac human/*.java
干杯,
您在 class 中有周期。所以你有两个选择。 1)一起编译 2) 创建一个新的 class 例如在那里工厂和实例化对象
在你的代码中创建循环从来都不是一个好主意
您是否尝试过:javac *.java
在您的文件夹中?
Java: How can I compile an entire directory structure of code ?