[Java lista] java.beans vs generics

biziclop biziclop at gmail.com
2007. Jún. 22., P, 09:12:19 CEST


Bytecode szinten lehet, hogy nem tesz kulonbseget, de azert az tulzas,
hogy a jvm nem ismeri, hiszen a Class.getTypeParameters() segitsegevel
igenis meg tudod mondani, hogy mi a helyzet.

lsp

On 6/22/07, Böszörményi Péter <zmblevlist at gmail.com> wrote:
> Emlekeim szerint a java fordito a genericset siman atalakitja a castolasra,
> es ugy forditja le, igy jvm szamara a generics ismeretlen fogalom. Rovid kis
> pelda:
>
>  public static void foo() {
>    ArrayList list = new ArrayList();
>    list.add("A");
>    String x = (String)list.get(0);
>  }
>  public static void main(String[] args) {
>    ArrayList<String> list = new ArrayList<String>();
>    list.add("A");
>    String x = list.get(0);
>  }
>
> Lathato, egyik a regi hasznalat, masik a generics.
> Ha ezt a kodot leforditju, majd javappal vissza, akkor valami ilyesmi
> eredmeny lesz mindket esetben (reszlet):
>  11: invokevirtual #5; //Method
> java/util/ArrayList.add:(Ljava/lang/Object;)Z
>  14: pop
>  15: aload_1
>  16: iconst_0
>  17: invokevirtual #6; //Method
> java/util/ArrayList.get:(I)Ljava/lang/Object;
>  20: checkcast #7; //class java/lang/String
>
> Mint az lathato, a 17-es sornal a get fuggveny Objected ad vissza, es a
> 20-as sor felelos azert, hogy ezt a Objectet String-e
> castolja.
>
>
>
>
> On 6/22/07, Tamás Magyar <magyusz at gmail.com> wrote:
> > Java 1.5-ben szeretném eldönteni egy propertyről, hogy milyen List
> > (mondjuk ha tudnám, hogy List<? extends Number> -e, az lenne a
> > legszebb), de legalább azt, hogy List<String> vagy List<Long> -e,
> > mindezt a "java.beans" standard eszközökkel. Van annál szebb módszer,
> > mint az utolsó sora ennek a kódrészletnek?  A toString komparálása
> > helyett jobban örülnék, ha valahogy adna nekem szépen egy String
> > objektumot.
> >
> > import java.beans.BeanInfo;
> > import java.beans.PropertyDescriptor;
> >
> > BeanInfo beanInfo = getBeanInfo(bean); //import java.beans.Introspector;
> > PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors
> ();
> > for (PropertyDescriptor descriptor : propertyDescriptors) {
> > if(descriptor.getPropertyType().isAssignableFrom(List.class)){
> >
> if(descriptor.getReadMethod().getGenericReturnType().toString().equals("java.util.List
> <java.lang.String>")){
> >
> > Sok debugolás után sun.reflect.generics osztályokba futottam, azok nem
> > platform függetlenek, úgyhogy azokat kerülném, de még azokból sem
> > tudtam egzaktul kinyerni, hogy milyen is az a List. getBounds() -ig
> > eljutottam, de az Object -et adott vissza, pedig nem arra voltam
> > kiváncsi, hogy List-nek általában milyen paramétere lehet, hanem, hogy
> > az én List paraméterem most éppen milyen paramétert kapott.
> >
> > Az a gyanúm, hogy innen kéne valamelyik subinterfacet használni:
> >
> http://java.sun.com/j2se/1.5.0/docs/api/java/lang/reflect/Type.html
> > de nem jöttem rá, hogy melyiket és hogyan.
> >
> > Aki már csinált ilyet, légyszi segítsen! Köszi előre is!
> >
> >
> > Magyusz
> > _______________________________________________
> > Javalist mailing list
> > Javalist at javagrund.hu
> > http://javagrund.hu/mailman/listinfo/javalist
> >
>
>
> _______________________________________________
> Javalist mailing list
> Javalist at javagrund.hu
> http://javagrund.hu/mailman/listinfo/javalist
>
>


További információk a(z) Javalist levelezőlistáról