草庐IT

内包装

全部标签

java - 自动包装@Repeatable 注解的顺序

以前,我习惯于手工声明一个wrapperannotation,用一个数组,然后这样调用它:@Foos({@Foo(0),@Foo(1),@Foo(2)})publicvoidbar(){}因为我是用{...}初始值设定项创建一个数组,当我稍后通过反射访问此方法时,很明显顺序与声明的顺序相同。但是,当我使用Java8中新的@Repeatable注释时,我能保证顺序会被保留吗?我声明了一组简单的注解:public@interfaceFoos{Foo[]value();}@Repeatable(Foos.class)public@interfaceFoo{intvalue();}并使用最多样

java - 当我们有包装类时,为什么支持原语?

我们在java中有包装类,如Interger、Float..为什么它仍然支持阻止java成为完全面向对象语言的原语? 最佳答案 作为对象的包装器被放置在堆中。基元只是“值”并进入堆栈。这样效率更高,因为对于堆中的包装基元,您(至少)需要值(在堆栈中)和对包装器对象的引用。这种性能提升是否重要取决于您在做什么。对于繁重的数字工作,当然是这样,但对于99%的东西来说,这是相当烦人的。一方面,您无论如何都不能将基元存储在Collection中;他们被自动装箱。因此,存储大量它们的唯一方法是使用普通数组,这反过来会导致其他类型的低效率(例如

java - 在 Java 中使用包装类而不是原语的好处

在非常抽象的层面上,我确实知道包装类可以创建原始数据类型的对象,但我很好奇为什么我们需要使用包装类以及它们比原始数据类型有什么好处。 最佳答案 首先是集合,例如List,你不能使用原语int这里。实际上任何可以使用不同对象类型的通用类/接口(interface),比如publicinterfaceCallable{Vcall()throwsException;}请注意,最好不要使用newInteger(i)而是使用Integer.valueOf(i)来完成包装,后者将尝试使用缓存。展开作为Integer.intValue()完成。这

java扩展或包装一个类以添加额外的功能

当您想向类中添加一些额外信息时,您更喜欢哪种方式:您是扩展该类还是对其进行包装?在我的特定场景中,我想使用从数据库中获取的List添加一些分页信息。该分页信息将包括:intcurrentPage;inttotalResults;intcontainedResultsIndex;inttotalcontainedResults;还有一些方法:BooleanisNextPageAvailable();BooleanisPrevPageAvailable();你的意见是扩展还是包装? 最佳答案 听起来你在问在你的情况下你应该支持继承还是组

java - 为什么 Java 的 scheduleWithFixedDelay 使用 Runnable 而不是 FutureTask<?> 包装 runnable?

为什么Java的scheduleWithFixedDelay使用Runnable而不是包装runnable的FutureTask?这可以很容易地用两个不同的代码示例来展示:ScheduledExecutorServiceexecutorService=Executors.newSingleThreadScheduledExecutor();executorService.scheduleWithFixedDelay(newFutureTask(newCallable(){@OverridepublicIntegercall()throwsException{System.out.pri

java - 如何将 List 包装为 Jackson 生成的 JSON 中的顶级元素

我遇到了一个问题,我试图将一个列表作为根节点包含在内,但我似乎无法获得它。让我解释。假设我们有一个类“TestClass”classTestClass{StringpropertyA;}现在,在一些实用方法中,这就是我所做的StringutilityMethod(){Listlist=someService.getList();newObjectMapper().writeValueAsString(list);}我试图在JSON中获得的输出是{"ListOfTestClasses":[{"propertyA":"propertyAValue"},{"propertyA":"someO

java - 如果包装器使用拆箱,需要什么 intValue() 方法?

例如,看这段代码:IntegermyInt=newInteger(5);inti1=myInt.intValue();inti2=myInt;System.out.println(i1);System.out.println(i2);如您所见,我有两种方法可以将整数值从包装器复制到基元:我可以使用unboxing,或我可以使用方法Integer#intValue().既然已经开箱了,还需要什么方法呢? 最佳答案 在Java5中引入了拆箱功能.包装器(包括此方法)自originalrelease以来一直存在.Javadoc的链接那时候

java - Java 中的数字包装类

我来自PHP世界,我对如何在java中声明对象时思考感到困惑。所以当传统上你这样做时:Rectanglerect=newRectangle();因为rect是一个Rectangle数据类型。根据java教程页面,数字包装器类是Number的子类。所以它是一个类,但是当你实例化它时,教程是这样的:Integerx;x=12;为什么它不像传统方式那样:Integerx=newInteger(12);orIntegerx=newInteger();还有一个例子:Strings=newInteger(i).toString();所以这里的s是一个String对象。我明白了。但是你得到了新的In

java - 如何在Java中实现构造函数包装?

这就是我想要做的(在Java1.6中):publicclassFoo{publicFoo(){Barb=newBar();b.setSomeData();b.doSomethingElse();this(b);}publicFoo(Barb){//...}}编译器说:calltothismustbefirststatementinconstructor有什么解决方法吗? 最佳答案 你可以这样实现它:publicclassFoo{publicFoo(){this(makeBar());}publicFoo(Barb){//...}pr

java - instanceof 运算符在原始和包装器类型数组的情况下

intprimitivI[]={1,1,1};IntegerwrapperI[]={2,22,2};1.System.out.println(primitivIinstanceofObject);//true2.System.out.println(primitivIinstanceofObject[]);//CompilationErrorWhy????3.System.out.println(wrapperIinstanceofObject);//true4.System.out.println(wrapperIinstanceofObject[]);//true这里我有两个整数数