Лично, в то время как оба в настоящее время отвечают самым высоким требованиям, я не думаю, что любой из них решает проблему элегантным, многоразовым способом, особенно если вам нужно делать это очень часто.
Предположим, у вас есть какой-то старый унаследованный код/зависимость, что вы не можете изменить каким-либо образом (так что, по крайней мере, принять List<? extends Object>
, как @ReverendGonzo предложил in his comment. Предположим также, что вам нужно поговорить с этим унаследованным модулем много.
Я не думаю, что любое литье/копирование все время было бы терпимым в долгосрочной перспективе. Это делает ваш код уязвимым для коварных ошибок и трудно следовать или слегка (или резко) неэффективно и трудно читается.
Чтобы иметь читаемый и эффективный код производства, лучше инкапсулировать грязную часть в отдельный модуль, который имеет дело с иным безвредный, но уродливый.
class ProductionCode {
public void doJob() {
List<String> strings = Arrays.asList("pear", "apple", "peach");
StringMagicUtils.dealWithStrings(strings);
}
}
class StringMagicUtils {
@SuppressWarnings("unchecked")
public static void dealWithStrings(List<String> strings) {
ExternalStringMagic.dealWithStringsAsObjects((List) strings);
}
}
// Legacy - cannot edit this wonderful code below ˇˇ
class ExternalStringMagic {
public static void dealWithStringsAsObjects(List<Object> stringsAsObjects) {
// deal with them as they please
}
}
`String`` `Object` зачем он вам нужен? – khachik 2010-11-26 19:34:51
Возможно, вам нужно будет передать список функции, которая ожидает «Список
Что именно вы пытаетесь сделать? Из-за стирания типа, список является списком