导入模块中的隐形构造函数?

时间:2009-03-21 00:21:29

标签: java import jar

我有一个Java分配,它使用组件来构建程序。老师给了我们一个JAR,我们将用它来构建使用Eclipse的计算器。 JAR有2个班级。我们必须导入JAR并使用它的类。

我导入JAR:

import SWEB401_HW1.NumericOperation;

但是当我尝试为类创建一个对象时,它会给我一个错误,因为构造函数不可见。如何使用“NumericOperation”类来构建计算器?

7 个答案:

答案 0 :(得分:3)

根据您提供的信息 - 并考虑到这是一项任务 - 我只能给您一些关于要查找内容的提示。

假设你的项目设置正确,你仍然无法创建NumericOperation的实例,...

  • ... NumericOperation中可能有静态工厂方法。
  • ...“其他类”可以作为NumericOperation实例的工厂
  • ... NumericOperation实际上可能是您需要实现的接口或抽象类

编辑: 不想把它全部拿走,所以我会保持这个模糊。由于NumericOperation确实似乎是一个抽象类,尝试编写类似下面的类,看看你必须做些什么来阻止IDE抱怨:

public class MyNumericOperation extends NumericOperation {}

您还可以查看Java Tutorial here的继承部分。

答案 1 :(得分:2)

如果构造函数不可见,那么您正在尝试调用非公共构造函数。查看NumericOperation类的代码或java doc,找到一个公共的构造函数。很可能你正在调用无参数构造函数,并且该类特别隐藏了它,因为你需要一个初始值。

例如:

public class MyClass {
  private MyClass() {
    // Don't let callers instantiate me without args!
  }

  public MyClass(int initialValue) {
    // create a new object with initialValue
  }
}

如果调用代码尝试此操作:

MyClass obj = new MyClass();

您将收到您发布的错误。你需要调用新的MyClass(int)。

答案 2 :(得分:1)

如果你得到的错误是说onstructor不是“可见的”,那么它就是在讨论java中的可见性(public,provate,protected和package)。

这很好 - 这意味着你已经成功地导入了这个类并且它在你的类路径中。忽略谈论愚弄你的类路径的所有其他答案 - eclipse正在为你照顾它。

guess ,你的老师 f * cked up 没有在你需要使用的构造函数上放置“公共”声明。

要解决此问题,您正在编写的类需要位于SWEB401_HW1包中。

在eclipse中执行此操作的最简单方法是右键单击导航器中的java文件,并通过将其“移动”到SWEB401_HW1包中来“重构”它。

答案 3 :(得分:0)

如果我正确理解您的问题,则无需导入任何内容。这不是您访问JAR文件中的类的方式。相反,您需要将JAR文件的路径添加到Java的类路径中;具体取决于您的操作系统。或者,您可以将JAR文件解压缩到您自己的程序的类文件所在的目录中。 JAR文件只是一个具有不同扩展名的ZIP文件,因此您可以使用通常用于打开ZIP文件的任何内容来提取它,或者您可以使用JDK附带的jar工具:

jar xf SWEB301_HW1.jar

答案 4 :(得分:0)

没有必要提取任何东西。您需要在项目中将JAR添加到类路径中来使用JAR。

您使用的是Eclipse吗?如果是这样,您可以转到项目属性 - > java构建路径 - >库 - >添加外部JAR - >搜索您的罐子并添加它们。

这样你就可以获得项目中的所有JAR类。

答案 5 :(得分:0)

如果教师为您提供了Javadocs,API列表或源代码,请查找以下内容:

  • public static NumericOperation()
  • public NumericOperation()
  • public NumericOperation()

第一个可以在任何类中,但可能在NumericOperation类中。

第二个是NumericOperation类中的一个构造函数,它接受参数。请记住,如果类提供构造函数,则编译器不会为您生成无参数。

最后一个将在另一个类中(因为你需要一个实例来调用该方法)。

将来发布编译器吐出的确切错误消息比粗略陈述它所说的更有帮助。

答案 6 :(得分:0)

与一些早期的答案一致,你需要通过类路径提供jar,所以当你运行或编译时

 java(c) -cp myjar.jar:. etc 

我通常包含当前目录,这样就不会忘记我的代码在路径中。

导入时,必须使用java包名称。在zip程序中打开jar并将路径存档到所需的类文件,然后输入“import path;”用'。'

替换文件夹分隔符的位置