Próbuję zrozumieć ogólne metody w Javie. Biorąc pod uwagę następujący kod:Zrozumienie ogólnych metod java
public class GenericTest {
interface Shape {
public long area();
}
public static class Triangle implements Shape
{
private long base, height;
public long area() { return (base * height)/2; }
}
public static class Rectangle implements Shape
{
private long width, height;
public long area() { return width * height; }
}
public <T extends Shape> long area1(T shape)
{
return shape.area();
}
public long area2(Shape shape)
{
return shape.area();
}
}
nie widzi/nie rozumie, dlaczego powinno się używać/wdrożyć AREA1 zamiast obszarze2 (lub odwrotnie). Czy czegoś brakuje? Czy obie metody nie robią tego samego?
ona zostawiła mnie nieco mylić dotyczące rodzajowych w Javie
Nie ma sensu używać generycznych w tym przypadku. Przypadki, w których to * działa * mają sens, gdy nie wiesz, jakiego rodzaju typy musisz ** przechowywać **. –
W tym przypadku, ponieważ @LukasKnuth powiedział, że nie musisz tworzyć ogólnej wersji obszaru powierzchni2() jest dopuszczalne; Jednak obecna dokumentacja oracle pokazuje świetne przykłady na temat generycznych. Przykłady generycznych symboli wieloznacznych mogą również pomóc w wyjaśnieniu zamieszania. Zajrzyj na http://docs.oracle.com/javase/tutorial/extra/generics/methods.html –
Patrzyłem na generics jako przybliżony odpowiednik C++ szablony. Kluczową rzeczą, którą wskazałeś tutaj, jest brak innych odpowiedzi (i całkiem możliwe, że brakuje mi pojęcia, że są używane "kiedy nie wiesz, jaki typ ** przechowywać **." Który jest dokładnie czego szukałem w odpowiedzi :-) – Xaq