Java ClassCastException日期范围[]

Java ClassCastException日期范围[],java,stream,resultset,classcastexception,date-range,Java,Stream,Resultset,Classcastexception,Date Range,我试图将DateRange[]转换为带有流的数组,但它给了我一个ClassCastException错误 Array pgArray = rs.getArray("periodo_carica"); periodo_carica = (DateRange[]) pgArray.getArray(); List<DateRange> periodo_carica2 = new ArrayList<DateRange>(); periodo_cari

我试图将DateRange[]转换为带有流的数组,但它给了我一个ClassCastException错误

Array pgArray = rs.getArray("periodo_carica");
 periodo_carica = (DateRange[]) pgArray.getArray();
 List<DateRange> periodo_carica2 = new ArrayList<DateRange>();
 periodo_carica2 =
                 Arrays.stream(periodo_carica)
                 .map(DateRange2::getRange)
                 .filter(d -> DateRange2.getRange(d) != null)
                 .collect(Collectors.toList());

在我的postgresql数据库中,我有一个表,在Eclipse的java中,我创建了相应的属性DateRange[],您告诉我将其设置为OBJECT[],但它是DateRange[]

CREATE TABLE public.parlamentari
(
nome character varying(100) COLLATE pg_catalog."default" NOT NULL,
partito character varying(100) COLLATE pg_catalog."default" NOT NULL,
circoscrizione character varying(100) COLLATE pg_catalog."default" NOT NULL,
data_nascita date,
luogo character varying(100) COLLATE pg_catalog."default",
titolo_studi character varying(100) COLLATE pg_catalog."default",
mandati character varying(1000)[] COLLATE pg_catalog."default",
commissioni character varying(100)[] COLLATE pg_catalog."default",
periodo_carica daterange[],
CONSTRAINT parlamentari_pkey PRIMARY KEY (nome, partito, circoscrizione),
CONSTRAINT parlamentarinomekey UNIQUE (nome)
 ,
CONSTRAINT parlamentaripartitonomekey UNIQUE (partito, nome)

 )

已更新

错误消息告诉我们从
getArray()
调用返回的值是
对象[]
,而不是
日期范围[]
。当然,数组中的所有对象可能都是
DateRange
对象,但数组组件类型是
Object
,而不是
DateRange
,因此您必须强制转换两次

Array pgArray=rs.getArray(“periodo_carica”);
Object[]periodo_carica=(Object[])pgArray.getArray();//强制转换到对象[]
List periodo_carica2=新数组列表();
周期=
Arrays.stream(periodo_carica)
.map(o->(DateRange)o)//将每个元素强制转换为DateRange
.map(DateRange2::getRange)
.filter(d->DateRange2.getRange(d)!=null)
.collect(Collectors.toList());

我尝试了你说的速率,但它告诉我:periodo_carica=pgArray.getArray()//类型不匹配:无法从对象转换到对象[]…。如果我声明:Object periodo_carica//我得到另一个错误:类型数组中的方法流(T[])不适用于参数(Object)…到行:Arrays.stream(periodo_carica.map(o->(DateRange)o)//线程“main”java.lang.ClassCastException中的异常:class org.postgresql.util.PGobject不能转换为class org.jfree.data.time.DateRange(org.postgresql.util.PGobject位于模块org.postgresql中。jdbc@42.2.18加载程序“app”的名称;org.jfree.data.time.DateRange位于模块中jfreechart@1.5.0位于Servlet_Parlamento.Parlamentari.Tabella_Parlamentari.lambda$0(Tabella_Parlamentari.java:106)的加载程序“app”)的@因此数组包含
PGobject
对象,而不是
DateRange
对象。因为我们不知道您的数据模型,所以我们无法帮助解决这个问题。在postgresql中的数据库中,我有一个表,在Eclipse中的java中,我创建了相应的属性DateRange[],您告诉我将其设置为OBJECT[],但它是DateRange[]@Marina在错误消息中说“
Object[]
不能强制转换为
DateRange[]
”,因此显然是调用
getArray()
时从数据库获得的
Object[]
CREATE TABLE public.parlamentari
(
nome character varying(100) COLLATE pg_catalog."default" NOT NULL,
partito character varying(100) COLLATE pg_catalog."default" NOT NULL,
circoscrizione character varying(100) COLLATE pg_catalog."default" NOT NULL,
data_nascita date,
luogo character varying(100) COLLATE pg_catalog."default",
titolo_studi character varying(100) COLLATE pg_catalog."default",
mandati character varying(1000)[] COLLATE pg_catalog."default",
commissioni character varying(100)[] COLLATE pg_catalog."default",
periodo_carica daterange[],
CONSTRAINT parlamentari_pkey PRIMARY KEY (nome, partito, circoscrizione),
CONSTRAINT parlamentarinomekey UNIQUE (nome)
 ,
CONSTRAINT parlamentaripartitonomekey UNIQUE (partito, nome)

 )