索引读取之间的类型不匹配

时间:2013-11-20 21:52:20

标签: javabeans

鉴于这两个类:

BeanTestA.java

import java.util.LinkedList;
import java.util.List;

public abstract class BeanTestA<E>
{

  protected final List<E> list = new LinkedList<>();

  public abstract E getDelegateAt( int idx );

  public void setDelegateAt( int idx, E e )
  {
    list.set( idx, e );
  }

  public void removeDelegateAt( int idx )
  {
    list.remove( idx );
  }

}

BeanTestB.java:

import java.util.LinkedList;

public class BeanTest
  extends BeanTestA<LinkedList>
{

  @Override
  public LinkedList getDelegateAt( int idx )
  {
    return list.get( idx );
  }

  @Override
  public void setDelegateAt( int idx, LinkedList v )
  {
    super.setDelegateAt( idx, v );
  }

  @Override
  public void removeDelegateAt( final int idx )
  {
    super.removeDelegateAt( idx );
  }


}

如果我跑:

java.beans.Introspector.getBeanInfo( BeanTest.class );

我收到错误:

java.beans.IntrospectionException: type mismatch between indexed read and indexed write methods: delegateAt

因为在某些时候它使用BeanTest.getDelegateAt和BeanTestA.setDelegateAt的参数调用java.beans.IndexedPropertyDescriptor.findIndexedPropertyType(Method,Method)。 findIndexedPropertyType从BeanTest.getDelegateAt的返回类型获取indexedPropertyType,因为擦除而是Object。但随后它将LinkedList作为参数,并抛出IntrospectionException。

这是java.beans.Introspector中的错误,还是这种带有泛型的索引bean模式不受支持?

这是OpenJDK 1.7.0_25(来自Debian sid)和Oracle JDK 1.7.0_45(来自oracle.com)。

0 个答案:

没有答案