草庐IT

可变序列

全部标签

java - 如何在带有日期字段的java中使类不可变?

我创建了一个带有日期字段的不可变类。我如何确保即使日期字段也是不可变的,因为即使您将日期字段设置为final,您以后仍然可以为其分配不同的值? 最佳答案 在您的getDate()方法中,返回一个newDate()实例,而不是相同的实例。publicDategetDate(){//Notcorrect.returnthis.date;//Thiswillmakeyourclassmutable.//Insteaduse,returnnewDate(this.date.getTime());//Thiswillmakesureyourd

java - 如何使用 JAXB 将 HashTable<String, String> 序列化为 XML?

我正在尝试使用JAXB序列化HashTable到XML。我是Java的新手(来自C#),所以我对这个任务有点困惑。我看到了下面的代码:publicstaticStringObjectToXml(Tobject,ClassclassType)throwsJAXBException{JAXBContextjaxbContext=JAXBContext.newInstance(classType);StringWriterwriterTo=newStringWriter();Marshallermarshaller=jaxbContext.createMarshaller();marshal

java - 为不可变类实现 clone()

我正在开发一个类库。我有一个矩阵的抽象基类Matrix,它提供一些基本方法的实现。从Matrix派生的是不同类型矩阵的具体子类。我要求矩阵是可克隆的,所以Matrix实现了Cloneable接口(interface)。一些从Matrix派生的类是不可变的不可变类的克隆方法不返回对象的克隆,而是返回对象本身是否可以接受?用于澄清的一些(过于简化的)代码:abstractclassMatriximplementsCloneable{...}classImmutableMatrixextendsMatrix{ImmutableMatrixclone(){returnthis;}...}cla

基于美团Leaf-Segment的双buffer方案实现序列号生成器

业务背景    有时项目中对于流水号有一些特殊的需求。比如,和业务A有关数据,我们在落库时想要给每条数据添加一个流水号字段,用于作为全局唯一标识。流水号格式规则如下,如:BTA(业务A代号)+年月日(20221208)+序列号。并且对序列号的长度有要求,如序列号要求为5位,即从00001到99999,当序列号达到99999后,再次获取则继续从00001开始累加循环。流水号的形式如TX2022120800001。在此之前需要对业务A有关数据每日的数据量进行评估,以上述为例,若一天的单据量超过99999,再次循环可能会造成流水号重复,以致流水号不唯一,所以序列号最大值可以设的稍大一位。初期方案最开

java - 如何在分布式环境中预取 Oracle 序列 ID

我有一个在5个应用程序服务器上运行的分布式Java应用程序。这些服务器都使用在第6台机器上运行的相同Oracle9i数据库。应用程序需要从序列中预取一批100个ID。在单线程、非分布式环境中做起来相对容易,您只需发出以下查询即可:SELECTseq.nextvalFROMdual;ALTERSEQUENCEseqINCREMENTBY100;SELECTseq.nextvalFROMdual;第一个选择获取应用程序可以使用的第一个序列ID,第二个选择返回最后一个可以使用的序列ID。在多线程环境中,事情变得更加有趣。您不能确定在第二次选择之前另一个线程不会再次将序列增加100。这个问题可

java - 在数据库中存储可序列化对象

我正在编写一个需要将对象写入数据库的应用程序。为了简单起见,我想序列化对象。但出于相同目的所需的ObjectOuputStream只有一个构造函数,该构造函数将OutputStream的任何子类作为参数。应该传递什么参数给它? 最佳答案 您可以传递一个ByteArrayOutputStream,然后将生成的stream.toByteArray()作为blob存储在数据库中。确保为类指定一个serialVersionUID,否则在添加/删除字段时会遇到困难。如果您需要更多人类可读的数据,还可以考虑用于对象序列化的xml版本-XMLEn

java - 从 Clojure 调用可变参数 Java 函数时出现问题

我正在尝试使用JDK7中的JavaNIO.2API。特别是,我想调用方法:Paths#get(Stringfirst,String...more)这是一个静态方法,它接收至少一个字符串,并返回一个与之对应的Path对象。有一个重载形式:Paths#get(URIuri)但是,我似乎无法从Clojure中调用top方法。我似乎能得到的最近的是:(Paths/get^Stringdir-fq(object-array0))失败:java.lang.ClassCastException:[Ljava.lang.Object;cannotbecastto[Ljava.lang.String;如

Java 7 使用可变参数重载

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:bugwithvarargsandoverloading?谁能给我解释一下这个是如何工作的:classVararg{staticvoidvararg(int...x){System.out.println("Integer...");}staticvoidvararg(long...x){System.out.println("long...");}publicstaticvoidmain(String[]args){ints=0;vararg(s,s);}}获取编译时错误classVararg{staticv

java - jackson ,序列化引用的一个属性

当序列化具有其他对象引用的Java对象时,我只需要序列化嵌套对象的一个​​属性(外键的通常情况,因此序列化对象引用的“id”属性)。忽略其他一切。例如,我有两个类需要序列化为JSON和XML(为清楚起见删除了JPA注释):关系:用户->(一对多)地址信息;另外:AddressInformation->(one-to-one)User@XmlRootElementpublicclassUser{privateStringid;privateStringfirstName;privateStringlastName;privateStringemail;privateAddressInfo

java - HashMap 不可序列化

具有Serializable键/值的HashMap应该是Serializable。但这对我不起作用。尝试了一些其他的IO流。没有工作。有什么建议吗?测试代码publicclassSimpleSerializationTest{@TestpublicvoidtestHashMap()throwsException{HashMaphmap=newHashMap(){{put(newString("key"),newString("value"));}};ByteArrayOutputStreambos=newByteArrayOutputStream();ObjectOutputout=n