Я пытаюсь понять общие методы в Java. Учитывая следующий код:Понимание общих методов 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();
}
}
Я не могу увидеть/понять, почему я должен использовать/реализовать Area1 вместо Area2 (или наоборот). Я что-то упускаю? Разве оба метода не делают то же самое?
Он оставил меня немного смущен относительно дженериков в Java
Нет смысла использовать дженерики в этом случае. Случаи, в которых он имеет смысл, имеют смысл, когда вы не знаете, какие типы вы должны ** хранить **. –
В этом случае, как @LukasKnuth сказал, что вам не нужно создавать общую версию области area2(), приемлемо; Однако текущая документация оракула показывает отличные примеры для дженериков. Примеры шаблонов подстановочных знаков также могут помочь в выяснении путаницы. Посмотрите на http://docs.oracle.com/javase/tutorial/extra/generics/methods.html –
Я рассматривал дженерики как приблизительный эквивалент C++ шаблоны. Ключевая вещь, которую вы указали здесь, которая отсутствует в других ответах (и, вполне возможно, то, что мне не хватает, является понятием, что они используются », когда вы не знаете, какой тип ** хранит **.» Что именно что я искал в ответ :-) – Xaq