Невидимый конструктор в Импортированном модуле? - PullRequest
0 голосов
/ 21 марта 2009

У меня есть назначение Java, которое использует компоненты для сборки программы. Учитель дал нам JAR, который мы должны использовать для построения калькулятора с использованием Eclipse. В банке есть 2 класса. Мы должны импортировать JAR и использовать его классы.

Я импортирую банку:

import SWEB401_HW1.NumericOperation;

но когда я пытаюсь создать объект для класса, он выдает ошибку, потому что конструктор не виден. Что я могу сделать, чтобы использовать класс "NumericOperation" для построения калькулятора?

Ответы [ 7 ]

3 голосов
/ 21 марта 2009

С предоставленной вами информацией - и учитывая, что это задание - я могу лишь дать вам несколько советов о том, что искать.

Если ваш проект настроен правильно, и вы все еще не можете создавать экземпляры NumericOperation, ...

  • ... в NumericOperation могут быть статические фабричные методы.
  • ... «другой класс» может действовать как фабрика для экземпляров NumericOperation
  • ... NumericOperation фактически может быть интерфейсом или абстрактным классом, который вам нужно реализовать

EDIT: Не хочу отдавать все это, поэтому я буду держать это расплывчато. Поскольку NumericOperation действительно является абстрактным классом, попробуйте написать класс, подобный следующему, и посмотрите, что вы должны сделать, чтобы остановить жалобу IDE:

public class MyNumericOperation extends NumericOperation {}

Вы также можете взглянуть на часть наследования Учебника Java здесь .

2 голосов
/ 21 марта 2009

Если конструктор не виден, то вы пытаетесь вызвать не публичный конструктор. Посмотрите код или документ Java для вашего класса NumericOperation и найдите общедоступный конструктор. Скорее всего, вы вызываете конструктор без аргументов, а класс его специально скрыл, потому что вам нужно начальное значение.

Например:

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).

1 голос
/ 21 марта 2009

Если вы получаете сообщение о том, что onstructor не «виден», то он говорит о видимости в java (public, provate, protected и package).

Это хорошо - это означает, что вы успешно импортировали класс и он находится на вашем пути к классам. Не обращайте внимания на все остальные ответы, в которых говорится о том, чтобы дурачиться на вашем пути к классам - затмение позаботится об этом, хорошо для вас.

При догадке ваш учитель f * обиделся не поместил "публичную" декларацию в конструктор, который вам нужно использовать.

Чтобы это исправить, ваш класс, который вы пишете, должен быть в пакете SWEB401_HW1.

Самый простой способ сделать это в eclipse - щелкнуть правой кнопкой мыши файл java в навигаторе и «перестроить» его, «переместив» в пакет SWEB401_HW1.

0 голосов
/ 21 марта 2009

В соответствии с некоторыми более ранними ответами, вам нужно иметь jar-файл доступным через classpath, поэтому при запуске или компиляции выполните

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

Обычно я включаю текущий каталог, чтобы он не забывал, что мой код находится в пути.

При импорте вы должны использовать имена пакетов java. Откройте jar-файл в zip-программе и укажите путь к нужным файлам классов, затем введите «путь импорта»; где вы заменяете разделители папок на '.'

0 голосов
/ 21 марта 2009

Если инструктор дал вам Javadocs, список API или источник, поищите такие вещи:

  • публичная статическая NumericOperation ()
  • public NumericOperation ()
  • public NumericOperation ()

Первый может быть в любом классе, но, скорее всего, в классе NumericOperation.

Второй будет конструктором в классе NumericOperation, который принимает параметры. Помните, что если класс предоставляет конструктор, компилятор не создает для вас аргумента без аргументов.

Последний будет в другом классе (поскольку вам нужен экземпляр для вызова метода).

В будущем публикация точного сообщения об ошибке, которое выложил компилятор, более полезна, чем грубое изложение того, что он сказал.

0 голосов
/ 21 марта 2009

Не нужно ничего извлекать. Вам нужно использовать JAR в своем проекте, добавив его в classpath.

Вы используете Eclipse? Если это так, вы можете перейти к свойствам проекта -> путь сборки java -> библиотеки -> добавить внешние JAR -> найти ваши jar и добавить их.

Таким образом, вы получите все JAR-классы в вашем проекте.

0 голосов
/ 21 марта 2009

Если я правильно понимаю ваш вопрос, вам не нужно ничего импортировать. Это не то, как вы получаете доступ к классам в файле JAR. Вместо этого вам нужно добавить путь к файлу JAR в путь к классам Java; как именно вы это делаете, зависит от вашей операционной системы. Кроме того, вы можете извлечь JAR-файл в каталог, где находится файл класса вашей собственной программы. JAR-файл - это просто ZIP-файл с другим расширением, поэтому вы можете извлечь его, используя все, что обычно используете для открытия ZIP-файлов, или использовать инструмент jar, входящий в комплект JDK:

jar xf SWEB301_HW1.jar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...