gpt4 book ai didi

Java找不到父包中的类

转载 作者:行者123 更新时间:2023-12-01 16:57:15 25 4
gpt4 key购买 nike

我不确定这是类路径问题、语法问题还是访问修饰符问题。我第一次尝试在 Java 中实现包,但编译器在父包中找不到类。

我知道包结构中没有任何层次关系,并且我在子包类中显式导入父包类。

父包类的构造函数是公共(public)的。

我的印象是这两个目录都需要位于类路径上,但不确定。不管怎样,我可以确定类路径上有两个目录。

目录结构

home
|
|---java
|
|---src
|
|---com
|
|---inv
|
|---mail
|
|---SendMail.java
|
|---TeradataCon.java
|
|---ExcelWriter.java

类路径

(mdexter@server) /home/mdexter/java/src/com/inv/mail # echo $CLASSPATH
.:/storage/mdexter/java/lib/*:/usr/java6_64/jre/lib/*:/usr/java6_64/lib/*:/home/mdexter/java/src/com/inv/*:/home/mdexter/java/src/com/inv/mail/*

SendFile.java(精简)

package com.inv.mail;

import com.inv.TeradataCon;
import com.inv.ExcelWriter;

public class SendMail
{
public static void main(String[] args)
{
TeradataCon teradata = new TeradataCon(some, args, here);
ExcelWriter xls = new ExcelWriter(some, args, here);
}
}

TeradataCon.java(精简)

package com.inv;

public class TeradataCon
{
public TeradataCon()
{
// stuff
}
}

ExcelWriter.java(精简)

package com.inv;

public class ExcelWriter
{
public ExcelWriter()
{
// stuff
}
}

错误输出

(mdexter@server) /home/mdexter/java/src/com/inv/mail # javac *.java
StrategyVolumes.java:3: cannot find symbol
symbol : class TeradataCon
location: package com.inv
import com.inv.TeradataCon;
^
StrategyVolumes.java:4: cannot find symbol
symbol : class ExcelWriter
location: package com.inv
import com.inv.ExcelWriter;
^
StrategyVolumes.java:14: cannot find symbol
symbol : class TeradataCon
location: class com.inv.mail.StrategyVolumes
TeradataCon teradata = new TeradataCon(
^
StrategyVolumes.java:14: cannot find symbol
symbol : class TeradataCon
location: class com.inv.mail.StrategyVolumes
TeradataCon teradata = new TeradataCon(
^
StrategyVolumes.java:32: cannot find symbol
symbol : class ExcelWriter
location: class com.inv.mail.StrategyVolumes
ExcelWriter xls = new ExcelWriter(;
^
StrategyVolumes.java:32: cannot find symbol
symbol : class ExcelWriter
location: class com.inv.mail.StrategyVolumes
ExcelWriter xls = new ExcelWriter(;
^
6 errors

我尝试过的

  • 导入 com.inv.*; (应该不重要吧?)
  • 从/home/java/src/com/inv 编译父类 - 有效
  • 从/home/java/src/com/inv 编译 mail/*.java - 不起作用

最佳答案

首先,我认为您误解了类路径。您不将包目录放在类路径上 - 您只将输出目录的放在那里。

我建议您从 src 目录进行编译,并将输出保存到 bin 或classes 目录。例如,完全删除您的 CLASSPATH 环境变量(它很少有用,IME - 最好在必要时将其指定为命令行选项),然后使用类似以下内容的内容:

/home/mdexter/java/src # javac -d ../bin com/inv/mail/*.java

或者更好的是,按照 JB Nizet 的建议,将所有内容一起编译:

/home/mdexter/java/src # javac -d ../bin `find . -name '*.java'`

(或者使用 IDE 和/或构建工具。)

关于Java找不到父包中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31076820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com