Uploaded image for project: 'Weld'
  1. Weld
  2. WELD-1991

Wrong overloaded method invoked on decorator

XMLWordPrintable

      The following interface defines two overloaded methods. Both take one parameter where one is of type "java.util.Collection", the other one of "java.util.Set":

      public interface MyService {
      
        void run(Collection<String> values);
      
        void run(Set<Integer> values);
      
      }
      

      Furthermore a decorator is defined:

      @Decorator
      public interface MyServiceDecorator {
      
        @Inject @Delegate
        private MyService delegate;
      
        void run(Collection<String> values) {
          delegate.run(values);
        }
      
        void run(Set<Integer> values) {
          delegate.run(values);
        }
      
      }
      

      A client injects an instance of MyService and invokes "run" using a Set of integer values:

        @Inject
        private MyService myService;
      
        ...
          Set<Integer> values = new HashSet<>();
          myService.run(values);
        ...
      

      It can be observed that the method " void run(Collection<String> values)" is invoked on the decorator - which is wrong. Changing the order of the method declarations in the interface MyService "solves" the problem.

            mkouba@redhat.com Martin Kouba
            dirk-mahler Dirk Mahler (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: