2013-06-17 9 views
8

Mam kilka metod, które pobierają nazwy plików jako parametry. Wątpię w to, że najlepiej jest zadeklarować parametry tych metod.Co jest lepsze - użycie ciągu lub pliku jako typu parametru dla metod, które pobierają nazwy plików

  • Jeżeli parametr być typu String

    void normalizeData(String inFile) 
    
  • Albo mam jawnie zadeklarować parametr jako File.

    void normalizeData(File inFile) 
    

Osobiście uważam File bardziej intuicyjne, ale chcą wiedzieć, co jest najlepsze praktyki dla takich rzeczy.

+3

To byłby osobisty gust. IMO byłoby lepiej użyć parametru 'Plik' jako parametru, ale w implementacji' String' możesz zrobić: 'Plik file = nowy Plik (inFile); normalizeData (plik); 'i nie ma problemów :). –

+2

Preferowane jest użycie 'Plik', ponieważ nie pozostawia wątpliwości co do zamierzonego wejścia. 'String' może stać się niejednoznaczny. A co jeśli chcesz zezwolić programistom na przekazanie wartości 'String' do znormalizowania na pewnym etapie w przyszłości (że już załadowali oni siebie)? – MadProgrammer

+8

Mieć oboje. – Maroun

Odpowiedz

20

Przekazałbym - dzięki temu łatwiej jest przetestować kod i nie wiąże go system plików.

ten sposób kod kończy się tak:

public void normalizeData(InputStream in) 
{ 
    ... 
} 

i nazywając go:

myObject.normalizeData(new FileInputStream(myFile)); 

Albo

myObject.normalizeData(new FileInputStream("c:/myfile.txt")); 

Albo w teście

myObject.normalizeData(new ByteArrayInputStream("some test data".getBytes())); 
+1

+1 pozwala także odwoływać się do pliku znajdującego się w pliku jar/zip. –

+3

+1 Przestań poprawiać odpowiedź, mogę głosować tylko raz: P – MadProgrammer

+0

@MadProgrammer Mogę nadal głosować ... czekaj, teraz nie mogę. –

0

Po przejściu łańcucha znaków masz kontrolę nad sposobem otwierania pliku i zarządzanie dojściem do pliku. Centralizujesz ten kod. Jeśli przejedziesz obok obiektu File, duplikujesz kod obsługi plików wszędzie tam, gdzie jest to wywoływane. Tak więc miałbym silną preferencję dla tego pierwszego.

+0

* Jeśli przekazujesz ciąg znaków, masz nad nim kontrolę nad sposobem otwierania pliku * czy możesz wyjaśnić, w jaki sposób? –

+0

Jak ustalić, czy 'String' jest plikiem, a nie danymi, które użytkownik ma przetworzyć? – MadProgrammer

0

Zależy od tego, czy plik ma być przechowywany poza metodą normalizeData, czy tylko wewnątrz. Jeśli chcesz zrobić coś na pliku przed lub po wywołaniu metody normalizeData, utwórz obiekt pliku poza metodą normalizeData i przekaż odwołanie do metody. Jeśli TYLKO twoja metoda normalizeData musi działać na obiekcie pliku, po prostu prześlij do niego nazwę pliku.

W zależności od potrzeb i sposobu obsługi pliku.

4

Pomyśl o użyciu wielu przeciążonych metod, aby dać użytkownikowi interfejsu API wybór.

Pomyśl także o przekazywaniu InputStream, ponieważ możliwe jest, że użytkownik interfejsu API chce użyć dowolnej reprezentacji danych w pamięci.

1

Projekt zależy od wielu parametrów, takich jak, kto będzie używał tej metody. Czy to będzie przeciążone, czy jest to interfejs wewnętrzny, pakietowy czy publiczny interfejs API. to, że wydają się być ogólna i oferują dwie przeciążone metody:

  • taki, który przechodzi w Path co jest powszechnym sposobem określania ścieżki do pliku
  • a jeden z nich przechodzi w InputStream, tjOgólnie reprezentacją strumienia wejściowego bajtów

    public void normalizeData (Path filePath) // Ścieżka jest powszechnym sposobem na określenie ścieżki pliku

    public void normalizeData (InputStream) // ogóle reprezentacją strumienia wejściowego bajtów

Ale tak jak powiedziałem, zależy to od specyfikacji projektu.