Powiel możliwe:
C# vs Java genericsTyp wymazywania: Java vs C#
Java
użycie Typ wymazywania podczas C#
przechowywać informacje typu w czasie wykonywania, jakie są praktyczne różnice w zachowaniach język z tego projektu?
Powiel możliwe:
C# vs Java genericsTyp wymazywania: Java vs C#
Java
użycie Typ wymazywania podczas C#
przechowywać informacje typu w czasie wykonywania, jakie są praktyczne różnice w zachowaniach język z tego projektu?
Oto przykład czegoś, co jest możliwe tylko wtedy, gdy informacja o typie jest utrzymywana w czasie wykonywania:
public string DoSomething<T>()
{
return typeof(T).Name;
}
Najbliższy można uzyskać w języku Java jest coś jak:
public <T> string DoSomething(Class<T> theClass)
{
return theClass.getName();
}
coś, co dzieje się w Java ze względu na wymazywanie typów jest tworzeniem syntetycznych metod zwanych "metodami mostowymi".
Zwykle dzieje się tak, gdy Java próbuje skompilować klasę lub interfejs, który rozszerza sparametryzowaną klasę lub implementuje sparametryzowany interfejs. W tym przypadku kompilator Java może potrzebować stworzyć metodę syntetyczną (metodę mostu) jako część procesu usuwania typu, który pojawia się w śladzie stosu.
Kompilator robi to, aby zachować polimorfizm typów ogólnych po procesie usuwania tekstu.
Dokumentacja Java ma numer an example.
Istnieje wiele problemów z wymazywaniem typów. Przywraca złe wspomnienia. Nie używam Javy od 1.6, więc może to być nieaktualne, ale niektóre rzeczy, które pamiętam:
class c implements IComparable<MyClass>, IComparable<MyOtherClass>
jest niemożliwe.
List<T1>
, List<T2>
i tak dalej. Na przykład, Java -- How to deal with type erasure in constructors?
Look [tutaj] (http://stackoverflow.com/questions/355060/c-sharp-vs-java-generics) –