2014-01-08 2 views
0

Я думал, что я разумно понял использование пакетов, но при попытке использовать метод из импортированного пакета я испытываю якобы тривиальную проблему.Пакеты Java - Импорт против явного включения

У меня есть три файла в следующей структуре каталогов:

  • Tester.java
  • approach1 \ Approach.java
  • approach2 \ Approach.java

Их код выглядит следующим образом :

Tester.java

import approach1.Approach; 

public class Tester { 

    public static void main(String[] args) 
    { 
     approach1.Approach.sharedMethod("TEXT"); 

     sharedMethod("TEXT"); 
    } 
} 

approach1 \ Approach.java

package approach1; 

public class Approach { 

    public static void sharedMethod(String approachText) 
    { 
     System.out.println("Approach Text: " + approachText); 
    } 
} 

approach2 \ Approach.java

package approach2; 

public class Approach { 

    public static void sharedMethod(String approachText) { } 

} 

Как вы, вероятно, можете догадаться, я пытаюсь вызвать различные ответы различные подходы, основанные на том, какой пакет/класс импортируется. Проблема, с которой я сталкиваюсь, находится в пределах Tester.java. Первая, явная строка работает нормально, а вторая импортированная строка (sharedMethod («TEXT»)) выдает ошибку «Метод sharedMethod (String) не определен для типа Tester«. Я не понимаю, как я импортировал один из пакетов, поэтому метод должен быть видимым.

Любое разъяснение было бы полезным, поскольку я - Java newb. Благодаря!

+2

Нестатический импорт импортирует классы, а не методы.Вы все равно должны указывать класс при вызове метода: 'Approach.sharedMethod (" TEXT ");' –

ответ

3

Вы можете импортировать статический метод shareMethod как этот

import static approach1.Approach.sharedMethod; 
0

стандартного вида импорта, который вы использовали только импортировать классы - так что все в классе должны ссылаться, используя имя класса. просто использовать:

Approach.sharedMethod()

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

Просто для уточнения:

import approach1.Approach; 
    public class Tester { 
     public static void main(String[] args) 
     { 
      Approach.sharedMethod("TEXT"); 
     } 
    } 

отличается от

import approach2.Approach; 
    public class Tester { 
     public static void main(String[] args) 
     { 
      Approach.sharedMethod("TEXT"); 
     } 
    } 

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

Вам нужно указать только пакет в главном теле программы, если есть конфликт в именах или если вы ничего не импортировали.

Смежные вопросы