Почему следующее видно как лучше, чем старый способ литья?Java generics
MyObj obj = someService.find(MyObj.class, "someId");
против
MyObj obj = (MyObj) someService.find("someId");
Почему следующее видно как лучше, чем старый способ литья?Java generics
MyObj obj = someService.find(MyObj.class, "someId");
против
MyObj obj = (MyObj) someService.find("someId");
Другим преимуществом использования явного параметра типа было бы позволить реализовать метод обслуживания с использованием Proxy
(в этом случае MyObj
должно быть MyInterface
). Без явных параметров типа это было бы невозможно.
Вы можете использовать Proxy
под одеялом по многим причинам (испытания для одного)
Там нет никакой гарантии, что версия не-дженериков будет возвращать объект типа 'MyObj', так что вы можете получить ClassCastException.
В случае 1 наиболее успешно реализованные службы могут возвращать null, если нет объекта с идентификатором someId
типа MyObj
. Более того, первый случай позволяет службе иметь определенную конкретную логику для работы с классами типа MyObj
.
В случае 2, если вы не используете instanceof (избегайте, если это возможно), тогда вы рискуете уродливым ClassCastException
, который вам придется поймать и обработать.
Одна из причин, почему первый сценарий лучше, заключается в том, что метод find(Class,String)
теперь знает, для чего ему присваивается возвращаемое значение. Поэтому теперь он способен выполнять любые релевантные броски внутри, а не просто надеяться, что вернется правильный тип. Например, предположим, что метод find
локально размещает объект String
при вызове с "someId"
. Метод find
может иметь стратегию для литья String
в экземпляр MyObj
.
не лучше. Вероятно, это хуже, чем в особых обстоятельствах. Только время, в которое вы нуждаетесь, таково, что целевой объект должен будет вызвать newInstance() (и т. Д.) Для объекта класса - фабричные методы и прочее.
Если вы хотите сохранить электроны, кстати, это также будет работать
MyObj obj = someService.find((Class<MyObj>) null, "someId");
Кто говорит, что это лучше? – Milhous