代码如下:classFoo{privatefinalT[]array;@SafeVarargsFoo(T...items){this.array=items;}}我得到:[WARNING]Varargsmethodcouldcauseheappollutionfromnon-reifiablevarargsparameteritems我的作业有什么问题?如何解决?@SuppressWarnings不是一个选项,因为我希望这个构造函数真正“安全”。$javac-versionjavac1.8.0_40 最佳答案 来自docs:Appl
我的API中有一个带有通用可变参数的方法。我希望我的API与Java6源代码和二进制兼容,但如果Java7API使用者不会遭受不必要的“varargs”警告,那就太好了。我能想到的一个技巧是将我自己的java.lang.SafeVarargs注释添加到我的API并将其与我的可交付成果一起发送。结果:Java6编译器无法识别此注解并忽略它。Java7编译器会识别此注释,并且可能(?)首先从JDK类加载注释,因此它们不会再产生烦人的警告。除了许可方面的问题,这能保证有效吗?它似乎适用于javac。或者是否存在从JDK重新定义注释的配置会在调用站点产生不良副作用?或者有其他方法可以解决这个J
我有一些Java代码(使用GuavaImmutableList类):@NonnullpublicstaticUserHistoryforUser(longid,E...events){Listlist=ImmutableList.copyOf(events);returnnewBasicUserHistory(id,list);}我收到了像这样的方法附带的常见堆污染警告。由于我的方法没有对events进行任何修改,因此它不会引入堆污染。但是,如果(由于删除)此方法的客户端使用错误的events数组调用它,它似乎可以通过自身传播堆污染。如果我用@SafeVarargs注释它,我仍然会在其
我已经尝试让Android数据绑定(bind)工作2天了,它是一个接一个的编译器问题,现在我完全碰壁了。我用谷歌搜索了这个,没有找到任何东西。这是完整的日志:java.lang.RuntimeException:failure,seelogsfordetails.cannotgenerateviewbindersjava.lang.RuntimeException:failure,seelogsfordetails.CannotresolvetypeforSafeVarargsatandroid.databinding.tool.util.L.printMessage(L.java:1
为什么注解@SafeVarargs不能应用于非final实例方法? 最佳答案 如果您声明@SafeVarargs,那么您必须确定它实际上是安全的。如果一个方法是非最终的,它可以在子类中被覆盖。该覆盖可能不安全。通过要求该方法是final,开发人员可以保证他所做的声明(即它的可变参数使用是安全的)实际上总是正确的(当然前提是开发人员实际提供了一个安全的可变参数方法),并且它实际上并没有被子类错误地重新实现该方法所破坏。 关于java-为什么注解@SafeVarargs不能应用于非final
我在一个私有(private)的内部类中有一个私有(private)方法,我想使用SafeVarargs注释。但是,我需要有一个静态或final方法。为什么私有(private)方法也需要是最终的?这不是多余的吗? 最佳答案 这是多余的,你提出了一个很好的观点。我认为要求final或static的真正原因是强制该方法不能被覆盖,因此子类不能以使@SafeVarargs注释在定义上无用的方式篡改数据方法。但是,虽然它是多余的,但这并不是一个糟糕的决定——很多时候,程序员会尽可能地将每个方法设为私有(private),然后根据需要慢慢打
我在一个私有(private)的内部类中有一个私有(private)方法,我想使用SafeVarargs注释。但是,我需要有一个静态或final方法。为什么私有(private)方法也需要是最终的?这不是多余的吗? 最佳答案 这是多余的,你提出了一个很好的观点。我认为要求final或static的真正原因是强制该方法不能被覆盖,因此子类不能以使@SafeVarargs注释在定义上无用的方式篡改数据方法。但是,虽然它是多余的,但这并不是一个糟糕的决定——很多时候,程序员会尽可能地将每个方法设为私有(private),然后根据需要慢慢打
在这段代码中,packagecom.example;interfaceCollectorIF{//@SafeVarargs//Error:@SafeVarargsannotationcannotbeappliedtonon-finalinstancemethodaddAllvoidaddAll(T...values);}classCollectorimplementsCollectorIF{@SafeVarargspublicfinalvoidaddAll(T...values){}}classComponent{publicvoidcompute(Tvalue){Collectorc