2013-07-25 3 views
1

В настоящее время я участвую в разработке Java, и я заинтересован в создании классов Java, которые другие пользователи могут импортировать в свою программу и использовать. Да, я знаю, что мой примерный класс прост и глупо, но я хочу изучить концепцию и начать создавать более сложные классы, которые люди могут импортировать в свои проекты.Импорт классов в файлы Java

Я создал простой класс "Logger", который при вызове записывает как текст в консоль, так и текстовый файл для удобства чтения. Вы можете назвать этот класс, используя следующие команды ...

Logger Logger = new Logger(); 
Logger.create(); 
Logger.log("This text will be logged to the console and log.log"); 

Смотри ниже Logger класса.

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 

public class Logger { 
     FileWriter fw; 
     BufferedWriter br; 
     File file = new File("log.log"); 
     boolean fileExists = file.exists(); 
     public void log(String message) { 
      try { 
       fw = new FileWriter(file, true); 
       br = new BufferedWriter(fw); 
       Calendar cal = Calendar.getInstance(); 

       int hour = cal.get(Calendar.HOUR_OF_DAY); 
       if(hour > 12) 
        hour = hour - 12; 

       int minute = cal.get(Calendar.MINUTE); 
       int second = cal.get(Calendar.SECOND); 
       int millis = cal.get(Calendar.MILLISECOND); 

       int ampm = cal.get(Calendar.AM_PM); 
       String ampmString; 
       if(ampm == 1) 
        ampmString = "PM"; 
       else 
        ampmString = "AM"; 

       String now = String.format("%02d:%02d:%02d.%03d %s", hour, minute, second, millis, ampmString); 

       System.out.println(now + " - " + message); 
       br.write(now + " - " + message); 

       br.newLine(); 
       br.close(); 
      } catch (Exception err) { 
       System.out.println("Error"); 
      } 

     } 
     public void create() { 
      try { 
       fw = new FileWriter(file, true); 
       br = new BufferedWriter(fw); 
       SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-YYYY"); 
       String dateString = sdf.format(new Date()); 
       if(file.length() != 0) 
        br.newLine(); 
       System.out.println("Log: " + file.getAbsolutePath()); 
       br.write("--------------------" + dateString + "--------------------"); 
       br.newLine(); 
       br.close(); 
      } catch (Exception err) { 
       System.out.println("Error"); 
      } 
     } 
    } 

Проблема, которую я имею в порядке, чтобы использовать этот класс, я должен добавить его к каждому проекту я создаю и хотят использовать это. Есть ли способ добавить импорт, например, mydomain.Logger.*; и иметь доступ к этому классу и его методам?

Мой вопрос, Каков наилучший способ разрешить кому-либо импортировать/использовать мой класс Logger простейшим способом? Какие шаги я должен предпринять, чтобы позволить им сделать это?

+1

Поскольку вы новичок в Java, я хотел бы отметить, что существует несколько стандартных библиотек протоколирования, которые делают то, что вы наметили здесь. Замечательно, что вы пишете код, чтобы учиться, но будьте осторожны, изобретая колесо. Если вы используете log4j или slf4j, шансы очень высоки, что вы можете получить любые другие сторонние библиотеки для записи в файлы журнала ошибок вместе со своим кодом. – jalynn2

+0

@ jalynn2 Я это понимаю. Я просто возился с этой идеей, и это была самая простая вещь, которую я мог придумать. Спасибо за предложения. :) – Dev

ответ

1

Составьте свой класс в JAR-файл, а затем добавьте эту банку в путь к классам для каждого проекта. Это стандартный подход Java для повторного использования классов.

+0

Разве я не могу сделать что-то подобное? 'import org.apache.commons.lang.StringEscapeUtils;' Но используя мой домен, например, 'import com.mydomain.Logger;'? – Dev

+1

Да, вы можете «импортировать com.mydomain.Logger;», и компилятор найдет его в файле jar. Если вы используете IDE, например Eclipse, добавьте файл jar в зависимости от проекта. – jalynn2

+0

Понял. Спасибо jalynn2. – Dev

0

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

0

Язык Scala позволяет импортировать элементы произвольных объектов, но Java позволит вам импортировать статических пользователей. Вы можете попробовать использовать static imports. Однако вам нужно будет изменить свой класс Logger на статический метод log. Так как вы, вероятно, просто хочу один экземпляр вашего регистратора, я рекомендовал бы с помощью singleton enum pattern:

// Using "enum" instead of "class" 
public enum Logger { 
    // Create singleton instance 
    INSTANCE; 

    // Create static log method for export 
    public static void log(String message) { 
     INSTANCE.log(message); 
    } 

    // The rest of your class is unchanged 
    FileWriter fw; 
    BufferedWriter br; 
    File file = new File("log.log"); 
    boolean fileExists = file.exists(); 
    public void log(String message) { 
     // ... 
    } 
    public void create() { 
     // ... 
    } 
} 

Теперь в каждом файле вы хотите использовать его, вы можете просто сделать import static mydomain.Logger.log;, чтобы получить прямой доступ к методу log!

1

Каждый класс имеет package. Вы объявите в верхней части вашего файла. Для вашего класса это может быть, например, package com.mydomain;. (Ваш пример не объявляет пакет, поэтому назначается default - подумайте «нет»). Пакеты соответствуют фактическим папкам, например. вы должны поместить свой Logger.java в путь com/mydomain/ в вашей файловой системе, чтобы он соответствовал объявлению пакета, как указано выше.

Теперь, если вы создадите класс в том же пакете, вы можете использовать свой класс Logger, просто объявив переменную, как в вашем примере. Импорт не требуется.

Если вы создаете новый класс в другом пакете т.е. com.otherdomain (это означает, что она будет фактически в другой папке в файловой системе), то вы должны использовать оператор импорта, как это: import com.mydomain.Logger; или import com.mydomain.*; иначе компилятор будет показывать ошибку и не позволит вам использовать ваш класс Logger.

Если вы хотите, чтобы другие люди использовали ваш класс, вы, вероятно, отправили бы свою двоичную версию (т. Е. Скомпилированный Logger.class), а не источник.И вы, вероятно, поместили бы этот файл в jar (это более сложная файловая структура).

Если бы я хотел использовать ваш класс, я мог бы просто добавить эту банку в проект classapth моего проекта, поэтому компилятор и система выполнения будут знать, как искать этот файл при поиске классов. Тогда я мог бы написать заявление import внутри своего класса, и я мог бы использовать ваш регистратор.

Я надеюсь, что это очищает вещи

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