【问题标题】:Error cannot find symbol with interface in same package错误在同一包中找不到具有接口的符号
【发布时间】:2019-09-23 15:58:06
【问题描述】:

您好,我的软件向导网络。我有一个问题,为什么我不能让我的课程编译。我不断收到错误:找不到符号。所有这些类都在同一个包块法中。我已经尝试了 import 语句的所有变体,但似乎无法消除此错误。目录结构是blocklaw --> src --> all_classes_here。 我也尝试更改包声明 blocklaw.src ,但仍然没有帮助。 我将在这里分享我的代码,

 package blocklaw;

    import java.security.MessageDigest;
    /*
    * returns a string value of the true fact
    */
    public class TrueFact implements Hashable {
      private String trueFact;
      private String hashFact;
      private String source;
      private String hashSource;
      private int bytesLength;
      private String hashedBytesLength;
      private String hashedHash;

      public TrueFact(String trueFact, String source){
        this.trueFact = trueFact;
        this.source = new Source(source).getSource();
        byte[] bytes = trueFact.getBytes("UTF-8");
        this.bytesLength = bytes.length;
        setHashCode();
      }

      public String getTrueFact(){
         return this.trueFact;
      }

      public String getHashFact(){
        return this.hashFact;
      }

      public String getSource(){
        return this.source;
      }

      public int getbytesLength(){
        return this.bytesLength;
      }

      public String getHashedBytesLength(){
        return this.hashedBytesLength;
      }

      public void setHashCode(){
        this.hashFact = hash(this.trueFact);
        this.hashSource = hash(this.source);
        this.hashedBytesLength = hash(String.valueOf(this.bytesLength));
        this.hashedHash = hash(this.hashFact+this.hashSource+this.hashedBytesLength);
      }

      public String getHashSource(){
        return this.hashSource;
      }

      public String hash(String input){
        try {
           MessageDigest digest = MessageDigest.getInstance("SHA-256");

           //Applies sha256 to our input,
           byte[] hash = digest.digest(input.getBytes("UTF-8"));

           StringBuffer hexString = new StringBuffer(); // This will contain hash as hexidecimal
           for (int i = 0; i < hash.length; i++) {
              String hex = Integer.toHexString(0xff & hash[i]);
              if(hex.length() == 1) hexString.append('0');
              hexString.append(hex);
           }
           return hexString.toString();
        }
        catch(Exception e) {
           throw new RuntimeException(e);
        }
      }
     }

据我了解,同一个包中的所有类都不需要显式导入。那么为什么我的错误导致它找不到符号?

下面是Hashable的接口...

package blocklaw;

public interface Hashable{
    public String hash();
}

【问题讨论】:

  • 你知道哪个班级,你得到这个错误。那堂课是私人的吗?
  • 就是这个类。我正在尝试编译,所以我可以测试这个类。该接口是公共的,具有一个公共类 hash()。
  • 您的代码应该可以编译,如果它们在您的类的同一个包中,则无需专门import 公共类(或受保护或包私有)。但是你究竟是如何编译这段代码的——看起来你使用javac?对了,你用什么命令?
  • 以上代码中哪一行导致编译失败?
  • Daniele...好问题我正在使用$:javac TrueFact.java

标签: java import package


【解决方案1】:

如前所述,这些是纠正答案所要遵循的步骤。

Compile Source.java
And the String input parameter to the hash function in Hashable.java
Compile Hashable.java
Now go one folder level up.
Add necessary try catch blocks in TrueFact.java
Build blocklaw/TrueFact.java

这将编译 TrueFact.java。

【讨论】:

  • 好的,我删除了src文件夹并将所有文件放在blocklaw目录下,先编译了Hashable接口,我仍然得到同样的错误。也就是找不到符号。
  • 是的 Hashable 在文件夹 blocklaw 中,我在原始帖子中添加了界面。
  • 能把Hashable接口的代码和包一起贴出来吗?另外请确认使用javac编译后blocksaw包中Hashable的.class文件是否存在。
  • 是的,先生,我已将其添加到 --> 它在 blocklaw 包中;我正在使用 javac TrueFact.java 进行编译。
  • Sujay,我很想,但我不知道怎么做??对不起。告诉我如何“接受”答案,我会为您完成。
【解决方案2】:

在一个接口中,所有方法本质上都是公共的和抽象的。因此无需在您的 public String hash() 中明确提及 public 关键字;方法 相反,您可以只说 String hash(); 还要确保你的哈希类在同一个目录和同一个包中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 2014-10-09
    • 2021-12-04
    • 1970-01-01
    • 2015-12-12
    • 2016-10-02
    相关资源
    最近更新 更多