/** * Retorna um campo no path indicado com sendo uma lista e cujo os elementos * da intancia são do tipo informando. Dispara uma exception se o path * indicado não existir na estrutura de dados ou se não for uma lista ou se * a lista não for da instância definida. * * @return Null se o campo no path indicado não tiver sido instanciado * ainda. */ @SuppressWarnings("unchecked") public default <T extends SInstance> SIList<T> getFieldList(String path, Class<T> typeOfInstanceElements) { SIList<?> list = getFieldList(path); if (list == null) { return null; } else if (typeOfInstanceElements.isAssignableFrom(list.getElementsType().getInstanceClass())) { return (SIList<T>) list; } throw new SingularFormException("'" + path + "' + retornou uma lista cujos as instancia do tipo " + list.getElementsType().getInstanceClass().getName() + ", que não é compatível com o tipo solicitado " + typeOfInstanceElements.getName(), (SInstance) this); }
/** * Retorna um campo no path indicado com sendo uma lista e cujo os elementos * da intancia são do tipo informando. Dispara uma exception se o path * indicado não existir na estrutura de dados ou se não for uma lista ou se * a lista não for da instância definida. * * @return Null se o campo no path indicado não tiver sido instanciado * ainda. */ @SuppressWarnings("unchecked") public default <T extends SInstance> SIList<T> getFieldList(String path, Class<T> typeOfInstanceElements) { SIList<?> list = getFieldList(path); if (list == null) { return null; } else if (typeOfInstanceElements.isAssignableFrom(list.getElementsType().getInstanceClass())) { return (SIList<T>) list; } throw new SingularFormException("'" + path + "' + retornou uma lista cujos as instancia do tipo " + list.getElementsType().getInstanceClass().getName() + ", que não é compatível com o tipo solicitado " + typeOfInstanceElements.getName(), (SInstance) this); }
/** * Cria a nova instância de lista com o cast para o generic tipo de * instancia informado. Se o tipo do conteudo não for compatível dispara * exception. * <p> * <p> * <pre> * MTipoLista<MTipoString> tipoLista = ... * * // metodo simples e não dispara exception se tipo errado * MILista<MIString> lista1 = (MILista<MIString>) tipoLista.newInstance(); * * // já devolvendo lista no tipo certo e verificando se correto * MILista<MIString> lista2 = tipoLista.newInstance(MIString.class); * </pre> */ @SuppressWarnings("unchecked") public <T extends SInstance> SIList<T> newInstance(Class<T> classOfElements) { SIList<?> newList = newInstance(); if (!classOfElements.isAssignableFrom(getElementsType().getInstanceClass())) { throw new SingularFormException("As instancias da lista são do tipo " + getElementsType().getInstanceClass().getName() + ", que não é compatível com o solicitado " + classOfElements.getName(), this); } return (SIList<T>) newList; }
/** * Cria a nova instância de lista com o cast para o generic tipo de * instancia informado. Se o tipo do conteudo não for compatível dispara * exception. * <p> * <p> * <pre> * MTipoLista<MTipoString> tipoLista = ... * * // metodo simples e não dispara exception se tipo errado * MILista<MIString> lista1 = (MILista<MIString>) tipoLista.newInstance(); * * // já devolvendo lista no tipo certo e verificando se correto * MILista<MIString> lista2 = tipoLista.newInstance(MIString.class); * </pre> */ @SuppressWarnings("unchecked") public <T extends SInstance> SIList<T> newInstance(Class<T> classOfElements) { SIList<?> newList = newInstance(); if (!classOfElements.isAssignableFrom(getElementsType().getInstanceClass())) { throw new SingularFormException("As instancias da lista são do tipo " + getElementsType().getInstanceClass().getName() + ", que não é compatível com o solicitado " + classOfElements.getName(), this); } return (SIList<T>) newList; }
@Override @SuppressWarnings("unchecked") public Class<T> getObjectClass() { SType<?> type = getTarget().getType(); if (type instanceof STypeSimple<?, ?>) { return (Class<T>) ((STypeSimple<?, ?>) type).getValueClass(); } return (Class<T>) type.getInstanceClass(); }
@Override @SuppressWarnings("unchecked") public Class<T> getObjectClass() { SType<?> mtipo = getTarget().getType(); if (mtipo instanceof STypeSimple<?, ?>) { return (Class<T>) ((STypeSimple<?, ?>) mtipo).getValueClass(); } return (Class<T>) mtipo.getInstanceClass(); }