Tag: 编译器警告

Java:使用reflection正确检查了类实例化

我正在尝试使用最简单的reflectionforms之一来创建类的实例: package some.common.prefix; public interface My { void configure(…); void process(…); } public class MyExample implements My { … // proper implementation } String myClassName = “MyExample”; // read from an external file in reality Class myClass = (Class) Class.forName(“some.common.prefix.” + myClassName); My my = myClass.newInstance(); 我们从Class.forName获取未知的Class对象会产生一个警告: 类型安全:从Class 到Class 我尝试过使用instanceof check方法: Class loadedClass = Class.forName(“some.common.prefix.” […]

对变量的赋值没有效果?

当我这样做:count = ++ count; 为什么我会收到警告 – 对变量计数的赋值没有效果? 这意味着计数递增,然后分配给自己或其他东西? 它和++ count一样吗? count = count ++会发生什么? ? 为什么我没有收到警告呢?

bootstrap类路径未设置

所以我得到warning: [options] bootstrap class path not set in conjunction with -source 1.6 我即将问3个问题。 我知道我需要设置bootstrap类路径,但我不确定我是怎么理解的。 一个快速谷歌只是发送给我从Oracle页面引用的页面,但我读了Oracle页面,并没有觉得我特别理解它。 我目前在Netbeans上运行此代码,所以我要做的就是点击播放按钮进行编译和运行。 是否有一个属性指示如何编译以便我可以添加引导类路径? 另外,对于即将发生的事件,我将仅在Netbeans上运行并从命令行运行它,使用bootstrap类路径编译的正确方法是什么? 他们说$ javac -source 6 HelloWorld.java但是只是说-source 1.6真的是解决方案吗? 也许是一个更大的问题,我将来如何避免这种类型的警告? 如果我理解甚至一点点,我引用一个旧的java源代码,因此引用较旧的方法。 我不确定这是怎么发生的。

如何在Eclipse中为标准Java API创建自定义警告

我希望Eclipse在我的Java项目中警告使用旧的Date / Calendar API,只允许Java 8全新的Date-Time API作为源中使用的一个。 如果使用例如java.util.Date ,我如何配置Eclipse以显示警告? 我很高兴接受关于这种方法的其他评论,以及其他替代方案。 我知道我也应该在CI构建中应用这种类型的validation,以及Java Policy可能是另一种选择。

坏路径警告,它来自哪里?

当我使用编译器警告(JDK 1.5)编译我的项目时,我收到一堆错误的路径元素警告: 警告:: [path]坏路径元素“C:\ Users \ User \ MyJava \ common \ lib \ junit.jar”:没有这样的文件或目录警告:: [路径]坏路径元素“C:\ Users \ User \ MyJava \ common \ lib \ jdom.jar“:没有这样的文件或目录警告:: [路径]坏路径元素”C:\ Users \ User \ MyJava \ common \ lib \ xerces.jar“:没有这样的文件或目录警告:: [path]坏路径元素“C:\ Users \ User \ MyJava \ common \ lib \ xml-apis.jar”:没有这样的文件或目录 还有很多。 这是使用IDEA 8.1.3。 我无法在IDEA的配置中找到任何地方(我对整个项目进行了深入研究),其中任何内容都指向这些文件。 […]

由于“通过varargs参数的潜在堆污染”,Eclipse的“未检查”警告的行为不同。 怎么修?

我有一个简单的Entry对象来填充列表 public class Entry { //fields public Entry(int a, String b, String c) { //… } //some getters } 以及检索条目的AsyncTask 。 在onProgressUpdate …… (here) | @Override V protected void onProgressUpdate(List… param) { for (Entry e : param[0]) myAdapter.add(e); progressBar.incrementProgressBy(1); myAdapter.notifyDataSetChanged(); } 我有警告: 类型安全:通过varargs参数参数进行潜在的堆污染 这发生在PC Linux 64bit上,而相反的警告显示在具有相同版本的Eclipse的笔记本上,相同的android项目,相同的Linux Mint 16,只是一个32位操作系统,说明“ 删除这个不必要的注释 ”(对不起,如果这个不是精确的警告,我现在在桌面PC上)。 所以基本上我添加和删除注释,在两台机器之间切换。 我认为这显然可能与正在使用的Java编译器或其他工作区设置有关。 现在,我不是在问这个设置/环境差异究竟是什么,但我的问题是我是否可以在代码中做些什么来解决这个问题并删除警告本身的来源。 我已经读过这个警告的起源和“堆污染”在这里意味着什么,但是没有消息来源暗示可能的修复(即这里或这里 ) […]

Java警告:未经检查的转换

我有以下(部分)课程: public class Graph { private ArrayList edges; public ArrayList getEdges() { return edges; } } 现在,当在其他地方调用方法getEdges()并将结果存储在ArrayList类型的变量中时,我收到warning: [unchecked] unchecked conversion : OtherFile.java:101: warning: [unchecked] unchecked conversion ArrayList edges = graph.getEdges(); ^ required: ArrayList found: ArrayList 我已经看过关于这个警告的其他多个问题,但我无法弄清楚我做错了什么。 getEdges()返回ArrayList ,为什么我不能将其结果存储在那个确切类型的变量中?

不应该指定参数’foo’ – 有什么危害?

比较这种方法: void doStuff(String val) { if (val == null) { val = DEFAULT_VALUE; } // lots of complex processing on val } ……对这种方法: void doStuff(String origVal) { String val = origVal; if (val == null) { val = DEFAULT_VALUE; } // lots of complex processing on val } 对于前一种方法,Eclipse会发出警告“不应分配参数’val’”。 为什么? 在我看来,前者更清洁。 首先,它并没有强迫我为val提出两个好名字(想出一个好的名字就足够了)。 (注意:假设封闭类中没有名为val字段。)

Java Generics,如何在使用类层次结构时避免未经检查的赋值警告?

我想使用一个使用generics参数的方法,并在类层次结构上返回generics结果。 编辑: 没有 SupressWarnings(“未选中”)答案允许:-) 这是一个说明我的问题的示例代码: import java.util.*; public class GenericQuestion { interface Function {R apply(F data);} static class Fruit {int id; String name; Fruit(int id, String name) { this.id = id; this.name = name;} } static class Apple extends Fruit { Apple(int id, String type) { super(id, type); } } static class Pear extends Fruit […]

为方法参数分配新值是否有问题?

Eclipse有一个选项来警告赋值给方法的参数(在方法内),如: public void doFoo(int a){ if (a<0){ a=0; // this will generate a warning } // do stuff } 通常我尝试激活(并注意)几乎所有可用的编译器警告,但在这种情况下,我不确定它是否值得。 我看到了改变方法中参数的合法情况(例如:允许参数“取消设置”(例如null)并自动替换默认值),但很少会导致问题,除非它可能有点混淆在方法中间重新分配参数。 你使用这样的警告吗? 为什么/为什么不呢? 注意: 避免这种警告当然等同于使方法参数final (只有这是编译器错误:-))。 所以这个问题为什么我应该在Java中的方法参数上使用关键字“final”? 可能是相关的。