Generic Map get does not return the right object? [message #1787152] |
Sun, 20 May 2018 08:49 |
Christian Eugster Messages: 213 Registered: July 2009 Location: St. Gallen Switzerland |
Senior Member |
|
|
Hi
First I must admit, that I am a newcomer concerning xtend. I read the manual and googled but did not find a solution to my problem:
Ich have a map initialized and filled with two different subclasses of ViewerFilter, a TermViewerFilter and a DeletedEntityViewerFilter, where as key I use the classes (see below):
Map<Class<T xtends ViewerFilter>, ViewerFilter filters = new HashMap();
val style = SWT.BORDER.bitwiseOr(SWT.SEARCH.bitwiseOr(SWT.ICON_CANCEL.bitwiseOr(SWT.ICON_SEARCH)))
filter = formToolkit.createText(parent, part.getPersistedState().getOrDefault("filter.value", ""), style)
filter.setLayoutData(new GridData(GridData.FILL_HORIZONTAL))
filter.addModifyListener(event |
{
putPersistedState("filter.value", filter.getText())
val viewerFilter = viewerFilters.get(TermViewerFilter) as TermViewerFilter
viewerFilter.setFilter(filter.getText())
viewer.refresh()
})
viewerFilters.put(TermViewerFilter, getTermViewerFilter())
viewerFilters.put(DeletedEntityViewerFilter, new DeletedEntityViewerFilter)
I expected, that the following part of the code:
val viewerFilter = viewerFilters.get(TermViewerFilter) as TermViewerFilter
returns the concrete subclass of ViewerFilter, e.g. TermViewerFilter. But as I must see the returned object is not of type TermViewerFilter but of type ViewerFilter. The subclass TermViewerFilter has a public method setFilter(String):
val viewerFilter = viewerFilters.get(TermViewerFilter) as TermViewerFilter
viewerFilter.setFilter(filter.getText())
I get a class cast exception at:
val viewerFilter = viewerFilters.get(TermViewerFilter) as TermViewerFilter
the exception is:
ch.eugster.herakles.authority.views.AuthorityView$3 cannot be cast to ch.eugster.herakles.ui.views.filters.TermViewerFilter
What am I doing wrong? Thank you for any hint!
P.S. In the meantime I also tried with classnames as keys, same strange result
[Updated on: Sun, 20 May 2018 08:57] Report message to a moderator
|
|
|
|
|
|
|
|
|
Re: Generic Map get does not return the right object? [message #1787239 is a reply to message #1787236] |
Tue, 22 May 2018 15:56 |
Christian Eugster Messages: 213 Registered: July 2009 Location: St. Gallen Switzerland |
Senior Member |
|
|
When I change the code
viewerFilters.put(TermViewerFilter, getTermViewerFilter())
viewerFilters.put(DeletedEntityViewerFilter, new DeletedEntityViewerFilter)
to
viewerFilters.put(TermViewerFilter, new TermViewerFilter()
{
override protected check(Object element)
{
throw new UnsupportedOperationException("TODO: auto-generated method stub")
}
})
viewerFilters.put(DeletedEntityViewerFilter, new DeletedEntityViewerFilter)
then the program runs right
[Updated on: Tue, 22 May 2018 15:57] Report message to a moderator
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.92286 seconds