„ Zanieczyszczenie sterty ” jak w typach niepodlegających zwrotowi (Samouczki Java ™> Nauka języka Java> Ogólne (zaktualizowane)) Dlaczego tak się nazywa?
Meta technika, która pozwala na ustawienie niezawodnego typu w środowisku wykonawczym.
„ Zanieczyszczenie sterty ” jak w typach niepodlegających zwrotowi (Samouczki Java ™> Nauka języka Java> Ogólne (zaktualizowane)) Dlaczego tak się nazywa?
Kilka razy widziałem na tej stronie posty, które potępiają implementację generycznych Java. Teraz mogę szczerze powiedzieć, że nie miałem żadnych problemów z ich używaniem. Jednak sam nie próbowałem stworzyć ogólnej klasy. Jakie masz problemy z ogólną obsługą
Ostatnio miałem zwyczaj „maskowania” kolekcji Java za pomocą przyjaznych dla ludzi nazw klas. Kilka prostych przykładów: // Facade class that makes code more readable and understandable. public class WidgetCache extends Map<String, Widget> { } Lub: // If you saw a...
Przeglądając jakiś kod, zauważyłem możliwość jego zmiany w celu użycia generycznych. Kod (zaciemniony) wygląda następująco: public void DoAllTheThings(Type typeOfTarget, object[] possibleTargets) { var someProperty = typeOfTarget.GetProperty(possibleTargets[0]); ... } Ten kod można zastąpić...
Na przykład mam grę, która ma narzędzia do zwiększenia zdolności gracza: Tool.h class Tool{ public: std::string name; }; I niektóre narzędzia: Sword.h class Sword : public Tool{ public: Sword(){ this->name="Sword"; } int attack; }; Shield.h class Shield : public Tool{ public:...
Powszechnie przyjmuje się, że niektóre rodzaje Java zawiodły w ważnych sprawach. Połączenie symboli wieloznacznych i granic spowodowało powstanie poważnie nieczytelnego kodu. Jednak gdy patrzę na inne języki, naprawdę nie mogę znaleźć ogólnego systemu typów, z którego programiści są zadowoleni....
Załóżmy, że mam dwie klasy, które wyglądają tak (pierwszy blok kodu i ogólny problem są związane z C #): class A { public int IntProperty { get; set; } } class B { public int IntProperty { get; set; } } Klasy te nie mogą być w żaden sposób zmieniane (są częścią zespołu zewnętrznego). Dlatego...
Nie pamiętam, kiedy ostatni raz pisałem lekcje ogólne. Za każdym razem, gdy wydaje mi się, że potrzebuję go po pewnym namyśle, wyciągam wniosek, że nie. Druga odpowiedź na to pytanie sprawiła, że poprosiłem o wyjaśnienia (ponieważ nie mogę jeszcze komentować, zadałem nowe pytanie). Weźmy więc...
Pozostaję w środowisku, w którym ludzie wierzą: Generics Java to funkcja używana wyłącznie do pisania bibliotek, a nie do prawdziwego kodowania. C ++ jest językiem programowania OO; templatejest funkcją opcjonalną i możliwą do uniknięcia Chociaż osoby te polegają w dużej mierze na bibliotekach...
AFAIK, moje klasy klasy extendsnadrzędne i implementsinterfejsy. Ale natrafiam na sytuację, w której nie mogę użyć implements SomeInterface. Jest to deklaracja typów ogólnych. Na przykład: public interface CallsForGrow {...} public class GrowingArrayList <T implements CallsForGrow> // BAD,...
Wydaje mi się, że mam nieporozumienie na temat różnicy między <Foo>i <? extends Foo>. Z mojego zrozumienia, gdybyśmy mieli ArrayList<Foo> foos = new ArrayList<>(); Oznacza to, że Foodo tej listy tablic można dodać obiekty typu . Ponieważ podklasy Foosą również typu Foo,...
W generics C # możemy zadeklarować ograniczenie parametru typu Tdo domyślnego konstruktora, mówiąc where T : new(). Jednak żadne inne ograniczenia tego rodzaju nie są ważne - new(string)na przykład itp. Z jakich powodów projekt i / lub implementacja języka jest tego przyczyną? Czy jest coś w...
Załóżmy, że mam tę hierarchię klas ... public abstract class Animal { public abstract void eat(); public abstract void talk(); } class Dog extends Animal { @Override public void eat() { } @Override public void talk() { } } class Cat extends Animal { @Override public void eat() { }...
To pytanie z perspektywy wewnętrznych kompilatorów. Interesują mnie generyczne, a nie szablony (C ++), więc zaznaczyłem pytanie C #. Nie Java, ponieważ AFAIK generyczne w obu językach różnią się implementacjami. Kiedy patrzę na języki bez generyków, jest to dość proste, możesz zweryfikować...
Jestem prawie pewien, że wszyscy znają ogólne metody formularza: T DoSomething<T>(T item) Ta funkcja jest również nazywana parametrycznie polimorficzną (PP), w szczególności PP rangi 1 . Powiedzmy, że tę metodę można przedstawić za pomocą obiektu funkcji formularza: <T> : T ->...
W obecnej formie to pytanie nie pasuje do naszego formatu pytań i odpowiedzi. Oczekujemy, że odpowiedzi poparte będą faktami, referencjami lub wiedzą fachową, ale to pytanie prawdopodobnie będzie wymagało debaty, argumentów, ankiet lub rozszerzonej dyskusji. Jeśli uważasz, że to...
W językach zorientowanych obiektowo, które obsługują ogólne parametry typu (znane również jako szablony klas i polimorfizm parametryczny, chociaż oczywiście każda nazwa ma inne konotacje), często możliwe jest określenie ograniczenia typu dla parametru typu, tak aby można było zejść z innego...
Zgodnie z zasadą nr 4 Object Calisthenics autorstwa Jeffa Baya (RTF) w The ThoughtWorks Anthology zaleca się, aby „ używać kolekcji pierwszej klasy ”. Zasada 4: Kolekcje pierwszej klasy Stosowanie tej reguły jest proste: każda klasa zawierająca kolekcję nie powinna zawierać innych zmiennych...
W innym pytaniu StackExchange zauważyłem, że ktoś używa tego prototypu: void DoSomething<T>(T arg) where T: SomeSpecificReferenceType { //Code.... } Mając na uwadze, że istnieje tylko ograniczenie jednego typu ( SomeSpecificReferenceType), jaka jest różnica i korzyść z pisania go w ten...
Mój typ IDE ( NetBeans ) sprawdza mój Collectionspodczas pisania kodu. Ale dlaczego muszę rzucić zwrócony przedmiot Object.clone()? Co jest w porządku Bez szkody, bez faulu. Ale nadal nie rozumiem. Czy sprawdzanie typu bez rzutowania zwrócony obiekt Object.clone()jest niemożliwe? Rodzajowych ramy...