[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [aspectj-users] Inferred method having a generic as argument
|
>From your description it sounds like a bug, but I can't seem to
recreate it - this file compiles fine for me:
---
class TextComponent {
Converter converter;
}
interface Converter<T> {
public T fromString(String value);
public String toString(T value);
}
class IntegerConverter implements Converter<Integer> {
public Integer fromString(String value) { return null; }
public String toString(Integer value) { return null; }
}
aspect X {
Object Converter.component;
public void TextComponent.setConverter(Converter c) {
this.converter = c;
c.component = this;
}
}
public class Test {
public static void main(String []argv) {
TextComponent tc = new TextComponent() ;
IntegerConverter ic = new IntegerConverter();
tc.setConverter(ic);
}
}
---
Can you tell me what I have done differently to you? Is your
TextComponent class generic by any chance? Is it a binary weave into
a library or everything being compiled from source?
Andy.
On 11/04/2008, Simone Gianni <simoneg@xxxxxxxxxx> wrote:
> Hello all,
> I'm moving my first steps in this beautiful world of AOPized Java, but
> in the last 3 hours I've been facing a problem I don't know how to
> solve. Probably it is just a stupid thing, but still ....
>
> I have a class, called TextComponent, on which I'm trying to add via
> AspectJ a field and a couple of methods. One of the methods is declared
> this way in my aspect :
>
> public void TextComponent.setConverter(Converter c) {
> this.converter = c;
> c.component = this;
> }
>
> Now, Converter is a generic interface :
>
> public interface Converter<T> {
>
> public T fromString(String value);
>
> public String toString(T value);
>
> }
>
>
> Which then has an implementation :
>
> public class IntegerConverter implements Converter<Integer> {
> ....
> }
>
>
> Now, I weave the project containing TextComponent, i get the method
> added, but then when i try to do :
>
> TextComponent tc = new TextComponent();
> IntegerConverter ic = new IntegerConverter();
> tc.setConverter(ic);
>
> I get an error, both from AJDT inside Eclipse and from ajc invoked in
> the Maven build. The error is :
>
> The method setConverter(Converter<T>) in the type TextComponent is not
> applicable for the arguments (IntegerConverter)
>
> Mh, I tried this on a plain class, instead than on an inferred method,
> just to make sure I was not missing something in the generics field. I
> also tried to declare the method differently (like
> setConverter(Converter<?> c) etc..) .. but still it does not work.
>
> Declaring it as setConverter(Object c) and then casting c to a Converter
> (or Converter<?>) works perfectly.
>
> I'm using version 1.5.4 or AspectJ.
>
>
> Any idea?
>
> Simone
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>