W niektórych interfejsach, które napisałem, chciałbym nazwać parametry typu ogólnego z więcej niż jednym znakiem, aby kod był bardziej czytelny.
Coś jak....
Map<Key,Value>
Zamiast tego...
Map<K,V>
Ale jeśli chodzi o metody, parametry typu wyglądają jak klasy java, co również jest mylące.
public void put(Key key, Value value)
Wygląda na to, że klucz i wartość to klasy. Znalazłem lub pomyślałem o pewnych zapisach, ale nie przypominają one konwencji Sun lub ogólnej najlepszej praktyki.
Alternatywy, które zgadłem lub znalazłem ...
Map<KEY,VALUE>
Map<TKey,TValue>
java
generics
naming-conventions
opiekun29
źródło
źródło
Odpowiedzi:
Firma Oracle zaleca w sekcji Samouczki języka Java> Ogólne> Typy ogólne :
Trzymałbym się tego, aby uniknąć zamieszania wśród programistów i ewentualnych opiekunów.
źródło
R
wyników iA
akumulatora.Element
wList<Element>
to parametryzowane typ lub klasę?BiFunction<T, U, R>
przestrzega tej konwencji. Gdyby tak było, byłobyBiFunction<T, S, R>
.Dodać
Type
Dobre omówienie można znaleźć w komentarzach na stronie DZone, Konwencje nazewnictwa dla typów parametryzowanych .
Zobacz komentarz Erwina Muellera. Jego sugestia ma dla mnie całkowicie
Type
oczywisty sens: Dołącz słowo .Nazwij jabłko jabłkiem, samochód samochodem. Nazwa, o której mowa, to nazwa typu danych, prawda? (W OOP klasa zasadniczo definiuje nowy typ danych.) Nazwijmy to „Typem”.
Przykład Muellera zaczerpnięty z artykułu w oryginalnym poście:
Dodać
T
Duplikat pytania zawiera tę odpowiedź autorstwa Andy'ego Thomasa. Zwróć uwagę na fragment przewodnika stylistycznego Google, który sugeruje, że wieloznakowa nazwa typu powinna kończyć się jedną wielką literą
T
.źródło
Powód, dla którego oficjalna konwencja nazewnictwa zaleca używanie pojedynczej litery, jest następujący:
Myślę, że w przypadku nowoczesnych IDE ten powód nie jest już ważny, ponieważ np. IntelliJ Idea pokazuje ogólne parametry typu w innych kolorach niż zwykłe klasy.
Kod z typem ogólnym, jak wyświetlany w IntelliJ Idea 2016.1
Z powodu tego rozróżnienia używam dłuższych nazw opisowych dla moich typów ogólnych, z taką samą konwencją, jak w typach regularnych. Unikam dodawania przedrostków i przyrostków, takich jak T lub Type, ponieważ uważam je za niepotrzebny szum i nie są już potrzebne do wizualnego rozróżniania typów ogólnych.
Uwaga: ponieważ nie jestem użytkownikiem Eclipse ani Netbeans, nie wiem, czy oferują one podobną funkcję.
źródło
Tak, można używać nazw wieloznakowych dla zmiennych typu, o ile są one wyraźnie odróżniane od nazw klas.
Różni się to od konwencji sugerowanej przez Sun przy wprowadzeniu leków generycznych w 2004 roku. Jednak:
Czytelność
Czytelność jest dobra.
Porównać:
do:
lub zgodnie z konwencją wieloznakową Google:
Styl Google
Przewodnik po stylach języka Java Google dopuszcza zarówno nazwy jednoliterowe, jak i wieloznakowe nazwy klasowe kończące się na T.
Zagadnienia
Nazwy jednoznakowe nie są jedynym sposobem odróżnienia parametrów typu od nazw klas, jak widzieliśmy powyżej.
Prawdą jest, że
@param
elementy JavaDoc mogą zapewnić dłuższy opis. Ale prawdą jest również to, że JavaDocs niekoniecznie są widoczne. (Na przykład w Eclipse istnieje pomoc dotycząca treści, która wyświetla nazwy parametrów typu).Wiele oryginalnych konwencji firmy Sun jest przestrzeganych prawie powszechnie w programowaniu w języku Java.
Jednak ta konkretna konwencja nie jest.
Najlepszy wybór spośród konkurencyjnych konwencji to kwestia opinii. Konsekwencje wyboru innej konwencji niż Oracle w tym przypadku są niewielkie. Ty i Twój zespół możecie wybrać konwencję, która najlepiej odpowiada Twoim potrzebom.
źródło
Możesz użyć javadoc, aby przynajmniej dać wskazówkę użytkownikom twojej klasy ogólnej. Nadal mi się to nie podoba (zgadzam się z @ chaper29), ale doktorzy pomagają.
na przykład,
Inną rzeczą, o której byłem znany, jest używanie mojego IDE do refaktoryzacji klasy łamiącej konwencję. Następnie pracuj nad kodem i refaktoryzuj z powrotem na pojedyncze litery. I tak mi się to ułatwia, jeśli używa się wielu parametrów typu.
źródło