[Java lista] java.beans vs generics

Böszörményi Péter zmblevlist at gmail.com
2007. Jún. 22., P, 08:22:33 CEST


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
>
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: http://javagrund.hu/pipermail/javalist/attachments/20070622/cdf89fb2/attachment.html 


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