2015-12-03 9 views
5

Chciałem przekazać obiekt jako parametr, a nie obiekt klasy jako literał typu. Próbowałem na wiele sposobów, ale nie otrzymałem danych wyjściowych.Jak ograniczyć metodę do akceptowania tylko obiektu jako parametru zamiast obiektów klas jako literałów typu?

public <T> List<Map<String,Object>> getUIElementsList(Class<T> requiredType) { 
     doSomeThing(); 
     return this.fieldList; 
} 

Jeśli używam kodu powyżej, który przyjmie następujące wartości jako przekazywanie parametrów. Jeśli mam klasę FormBean, to

FormBean formBean = new FormBean(); 
formBean.setUserId(252528); 
getUIElementsList(FormBean.class); //restrict this case 
getUIElementsList(formBean); 

Chcę, aby ta metoda mogła akceptować już utworzony obiekt intance. Nie mogę nawet użyć metody newInstance() do utworzenia innego obiektu, ponieważ wymagałem również wartości starych obiektów.

Wszelkie sugestie?

Odpowiedz

2

Sam Class<T> stanowi około wystąpienie też - jest to przypadek typu Class sparametryzowanego od rodzaju T.

myślę, że najlepiej można zrobić jest dodanie sprawdzić, czy dostarczony typ jest przykładem Class i jeśli tak, rzucać IllegalArgumentException:

public <T> List<Map<String,Object>> getUIElementsList(T value) { 
    if (value instanceof Class) { 
     throw new IllegalArgumentException("Class instances are not supported"); 
    } 
    .. 
} 

Przy definiowaniu parametrów typu, jesteś tylko dozwolone związanie ich przez przecięcia istniejących typów (rodzin), ale nie stosowanie negacji na zadanych typach, takich jak to, do czego dążysz, czyli coś w rodzaju "wszystkie typy oprócz jednego".

+0

Świetnie, dzięki kocho, zrozumiałem. –

+0

Nie ma za co. Możesz zaakceptować odpowiedź, jeśli uznasz ją za przydatną. –

Powiązane problemy