Pivot
  1. Pivot
  2. PIVOT-324

WTKXSerializer get method enhancement

    Details

    • Type: Improvement Improvement
    • Status: Resolved
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 1.4
    • Component/s: wtk-wtkx
    • Labels:
      None

      Description

      Method get() of class WTKXSerializer returns value of type Object, you see:
      http://incubator.apache.org/pivot/1.3/docs/api/org/apache/pivot/wtkx/WTKXSerializer.html#get(java.lang.String)

      As demostrated in documentation it cause code like this: (http://incubator.apache.org/pivot/1.3/tutorials/push_buttons.html)
      private PushButton pushButton = null;
      ...
      pushButton = (PushButton)wtkxSerializer.get("pushButton");

      In an alternative way, get() method may be declared as:
      <T> T get(String key)

      { //implementation }

      This way client code will be just:
      pushButton = wtkxSerializer.get("pushButton");

      so the type-case will be implicit. This feature is widely used in HtmlUnit framework and I find it quite neat.
      May be it coult be adopted to pivot project

        Activity

        Hide
        Greg Brown added a comment -

        We have tried this in the past, and unfortunately, it doesn't work. WTKXSerializer implements Dictionary<String, Object>, which requires the get() signature to return an Object, not a T.

        Show
        Greg Brown added a comment - We have tried this in the past, and unfortunately, it doesn't work. WTKXSerializer implements Dictionary<String, Object>, which requires the get() signature to return an Object, not a T.
        Hide
        Greg Brown added a comment -

        However, we could add a method such as this:

        @SuppressWarnings("unchecked")
        public <T> T getValue(String name)

        { return (T)get(name); }

        Comments?

        Show
        Greg Brown added a comment - However, we could add a method such as this: @SuppressWarnings("unchecked") public <T> T getValue(String name) { return (T)get(name); } Comments?
        Hide
        Todd Volkert added a comment -

        Yeah I think such a method would provide value.

        Show
        Todd Volkert added a comment - Yeah I think such a method would provide value.
        Hide
        Greg Brown added a comment -

        We could additionally define readObject() as follows:

        public <T> T readObject(URL location)

        { ... }

        With the exception of readObject(InputStream):Object, which is defined by the Serializer<Object> interface to return Object, this would also allow callers to assign the return value of this method without the need for a cast.

        Show
        Greg Brown added a comment - We could additionally define readObject() as follows: public <T> T readObject(URL location) { ... } With the exception of readObject(InputStream):Object, which is defined by the Serializer<Object> interface to return Object, this would also allow callers to assign the return value of this method without the need for a cast.
        Hide
        Dmitry Mamonov added a comment -

        About warning,

        @SuppressWarnings("unchecked")
        public <T> T getValue(String name)

        { return (T)get(name); }

        yes, in HtmlUnit methods declared exactly same:

        package com.gargoylesoftware.htmlunit.html;
        ....
        public abstract class HtmlElement extends DomElement {
        .....
        /**

        • Simulates clicking on this element, returning the page in the window that has the focus
        • after the element has been clicked. Note that the returned page may or may not be the same
        • as the original page, depending on the type of element being clicked, the presence of JavaScript
        • action listeners, etc.
          *
        • @param <P> the page type
        • @return the page that occupies this element's window after the element has been clicked
        • @exception IOException if an IO error occurs
          */
          @SuppressWarnings("unchecked")
          public <P extends Page> P click() throws IOException { return (P) click(false, false, false); }
        Show
        Dmitry Mamonov added a comment - About warning, @SuppressWarnings("unchecked") public <T> T getValue(String name) { return (T)get(name); } yes, in HtmlUnit methods declared exactly same: package com.gargoylesoftware.htmlunit.html; .... public abstract class HtmlElement extends DomElement { ..... /** Simulates clicking on this element, returning the page in the window that has the focus after the element has been clicked. Note that the returned page may or may not be the same as the original page, depending on the type of element being clicked, the presence of JavaScript action listeners, etc. * @param <P> the page type @return the page that occupies this element's window after the element has been clicked @exception IOException if an IO error occurs */ @SuppressWarnings("unchecked") public <P extends Page> P click() throws IOException { return (P) click(false, false, false); }
        Hide
        Greg Brown added a comment -

        I added the typed getValue() method, but I skipped the change to readObject(). I think that adding a type parameter to some readObject() overloads but not others could be confusing.

        Show
        Greg Brown added a comment - I added the typed getValue() method, but I skipped the change to readObject(). I think that adding a type parameter to some readObject() overloads but not others could be confusing.

          People

          • Assignee:
            Greg Brown
            Reporter:
            Dmitry Mamonov
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development