как сделать экземпляр List <MyType>?

Как я могу заставить такого рода вещи работать? Я могу проверить, если(obj instanceof List<?>) но не если(obj instanceof List<MyType>), Есть ли способ сделать это?

 Paul Bellora11 апр. 2012 г., 16:40
 Paul Bellora11 апр. 2012 г., 23:26

Ответы на вопрос(7)

if(!myList.isEmpty() && myList.get(0) instanceof MyType){
    // MyType object
}
 16 мая 2018 г., 21:16
ГдеmyList объявили?
 20 сент. 2017 г., 14:39
... а для пустого списка? Размышления?
 03 янв. 2018 г., 17:02
Этот ответ небезопасен, потому что даже если элемент 0 является MyType, другие элементы могут быть других типов. Например, возможно, список был объявлен как ArrayList & lt; Object & gt ;, затем был добавлен MyType, а затем была добавлена строка.
 01 нояб. 2017 г., 12:04
Yeap. Это единственный вариант, доступный для пустого списка.stackoverflow.com/questions/1942644/…
 10 апр. 2018 г., 19:16
@ AdamGawne-Cain. Это небезопасно, но, к сожалению, единственное решение для людей, не знающих много о списке. Например - у меня есть локальная переменнаяvalue который возвращаетсяObjectи мне нужно проверить - если это список, если он есть, проверить, является ли тип списка экземпляром моего интерфейса. Никакая обертка или параметризованный тип здесь не полезны.

вероятно, нужно использовать отражение, чтобы получить их типы для проверки. Чтобы получить тип списка: Получить универсальный тип java.util.List

 11 апр. 2012 г., 16:45
Насколько я знаю, это работает только для полей, но +1 за упоминание этого.

вместо использования instanceof:

public class Message1 implements YourInterface {
   List<YourObject1> list;
   Message1(List<YourObject1> l) {
       list = l;
   }
}

public class Message2 implements YourInterface {
   List<YourObject2> list;
   Message2(List<YourObject2> l) {
       list = l;
   }
}

public class FactoryMessage {
    public static List<YourInterface> getMessage(List<YourObject1> list) {
        return (List<YourInterface>) new Message1(list);
    }
    public static List<YourInterface> getMessage(List<YourObject2> list) {
        return (List<YourInterface>) new Message2(list);
    }
}

лучше передать его без приведения, чтобы избежать избыточной итерации списка (проверка типа первого элемента ничего не гарантирует). Мы можем привести каждый элемент куска кода, где мы перебираем список.

Object attVal = jsonMap.get("attName");
List<Object> ls = new ArrayList<>();
if (attVal instanceof List) {
    ls.addAll((List) attVal);
} else {
    ls.add(attVal);
}

// far, far away ;)
for (Object item : ls) {
    if (item instanceof String) {
        System.out.println(item);
    } else {
        throw new RuntimeException("Wrong class ("+item .getClass()+") of "+item );
    }
}

является ли ссылка на значение List или Map объекта Object экземпляром Collection, просто создайте экземпляр требуемого List и получите его класс ...

Set<Object> setOfIntegers = new HashSet(Arrays.asList(2, 4, 5));
assetThat(setOfIntegers).instanceOf(new ArrayList<Integer>().getClass());

Set<Object> setOfStrings = new HashSet(Arrays.asList("my", "name", "is"));
assetThat(setOfStrings).instanceOf(new ArrayList<String>().getClass());
 10 мар. 2017 г., 11:52
Какой смысл твоегоsetOfIntegers а такжеsetOfStrings?
 17 мар. 2017 г., 00:12
@DanielM только что обновил образец. Это должно быть использование этих ссылок! Спасибо!
Решение Вопроса

потому что тип данных стирается во время компиляции генериков. Единственный возможный способ сделать это - написать какую-нибудь оболочку, которая содержит тип, содержащийся в списке:

public class GenericList <T> extends ArrayList<T>
{
     private Class<T> genericType;

     public GenericList(Class<T> c)
     {
          this.genericType = c;
     }

     public Class<T> getGenericType()
     {
          return genericType;
     }
}
 Triton Man11 апр. 2012 г., 16:53
Спасибо, я думаю, что просто передам универсальный тип в функцию, которую я вызываю, чтобы проверить и проверить оба элемента.
 Triton Man11 апр. 2012 г., 16:38
хорошо, есть альтернативный способ проверить это?

object это примерList<T>, который не пуст:

if(object instanceof List){
    if(((List)object).size()>0 && (((List)object).get(0) instanceof MyObject)){
        // The object is of List<MyObject> and is not empty. Do something with it.
    }
}

Ваш ответ на вопрос