ile ilgili basit bir sorunum var. Java JDK7'de çalışan bir programım var ama bazı iç gözlem değişikliklerinden dolayı JDK8'de çalışmıyor. İşte Java JDK 8 IndexedPropertyDescriptor, JDK 7'den beri Liste nesnesi
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) throws IntrospectionException {
BeanInfo info = Introspector.getBeanInfo(MyListClass.class);
PropertyDescriptor[] descriptors = info.getPropertyDescriptors();
for (int i = 0; i < descriptors.length; i++) {
System.out.println(descriptors[i].getClass().getName() + ":" + descriptors[i].getName());
}
System.out.println("\n");
BeanInfo info2 = Introspector.getBeanInfo(MyIndexedListClass.class);
PropertyDescriptor[] descriptors2 = info2.getPropertyDescriptors();
for (int i = 0; i < descriptors2.length; i++) {
System.out.println(descriptors2[i].getClass().getName() + ":" + descriptors2[i].getName());
}
System.out.println("\n");
BeanInfo info3 = Introspector.getBeanInfo(MyArrayClass.class);
PropertyDescriptor[] descriptors3 = info3.getPropertyDescriptors();
for (int i = 0; i < descriptors3.length; i++) {
System.out.println(descriptors3[i].getClass().getName() + ":" + descriptors3[i].getName());
}
System.out.println("\n");
BeanInfo info4 = Introspector.getBeanInfo(MyIndexedArrayClass.class);
PropertyDescriptor[] descriptors4 = info4.getPropertyDescriptors();
for (int i = 0; i < descriptors4.length; i++) {
System.out.println(descriptors4[i].getClass().getName() + ":" + descriptors4[i].getName());
}
}
public class MyListClass {
private List<String> myListClass = new ArrayList<String>();
public List<String> getMyListClass() {
return myListClass;
}
public void setMyListClass(List<String> myListClass) {
this.myListClass = myListClass;
}
}
public class MyIndexedListClass {
private List<String> myIndexedListClass = new ArrayList<String>();
public String getMyIndexedListClass(int index) {
return myIndexedListClass.get(index);
}
public void setMyIndexedListClass(int index, String element) {
this.myIndexedListClass.set(index, element);
}
public List<String> getMyIndexedListClass() {
return myIndexedListClass;
}
public void setMyIndexedListClass(List<String> myIndexedListClass) {
this.myIndexedListClass = myIndexedListClass;
}
}
public class MyArrayClass {
private String[] myArrayClass = new String[20];
public String[] getMyArrayClass() {
return myArrayClass;
}
public void setMyArrayClass(String[] myArrayClass) {
this.myArrayClass = myArrayClass;
}
}
public class MyIndexedArrayClass {
private String[] myIndexedArrayClass = new String[20];
public String getMyIndexedArrayClass(int index) {
return myIndexedArrayClass[index];
}
public void setMyIndexedArrayClass(int index, String myValue) {
this.myIndexedArrayClass[index] = myValue;
}
public String[] getMyIndexedArrayClass() {
return myIndexedArrayClass;
}
public void setMyIndexedArrayClass(String[] myIndexedArrayClass) {
this.myIndexedArrayClass = myIndexedArrayClass;
}
}
}
JDK 7 günlükleri: İşte
sorunu yeniden oluşturmak için bir test programı İşte
java.beans.PropertyDescriptor:class
java.beans.PropertyDescriptor:myListClass
java.beans.PropertyDescriptor:class
java.beans.IndexedPropertyDescriptor:myIndexedListClass
java.beans.PropertyDescriptor:class
java.beans.PropertyDescriptor:myArrayClass
java.beans.PropertyDescriptor:class
java.beans.IndexedPropertyDescriptor:myIndexedArrayClass
JDK8 için günlükleri:
java.beans.PropertyDescriptor:class
java.beans.PropertyDescriptor:myListClass
java.beans.PropertyDescriptor:class
java.beans.PropertyDescriptor:myIndexedListClass -> Here is the change
java.beans.PropertyDescriptor:class
java.beans.PropertyDescriptor:myArrayClass
java.beans.PropertyDescriptor:class
java.beans.IndexedPropertyDescriptor:myIndexedArrayClass
ben JDK8'i gerçekten yakında kullanmak zorundayım, ancak uygulama artık çalışmıyor çünkü bu bir engelleme değişikliğidir. Collection
arabirimini genişleten tüm sınıflarla bu sorunu yaşıyorum (Liste, Harita, ...)
Kod, Apache Commons'dan commons-beanutils-1.8.0
kütüphanesi tarafından kullanılır.
Uygulamamın JDK7'yi kullanırken daha önce olduğu gibi çalışmasını sağlamak için bir çözüm, bir geçici çözüm arıyorum, herhangi bir çözüm var mı?
JDK7: http://docs.oracle.com/javase/7/docs/api/java/beans/IndexedPropertyDescriptor.html
JDK8: http://docs.oracle.com/javase/8/docs/api/java/beans/IndexedPropertyDescriptor.html
I (Dizi değişmedi çünkü) yerine listesi Diziyi İşte
resmi belgelere bağlantılar vardır kullanamazsınız
DÜZENLEME: Çözümümü buldum, problemim direkler ile ilgiliydi 1.3. Benim ActionForm benim endeksli alıcı/ayarlayıcı yeniden adlandırmak zorunda: http://www.coderanch.com/t/55172/Struts/Indexed-Properties
Örneklerinizde fark görmüyorum. Tam olarak sorun nedir? –
JDK 7'de BeanInfo'nun getPropertyDescritor yöntemi, MyIndexedListClass sınıfı için 'IndexedPropertyDescriptor' değerini döndürür ve JDK 8'de 'PropertyDescriptor' döndürür. –