【问题标题】:Disabling warning variable might not have been initialized?禁用警告变量可能尚未初始化?
【发布时间】:2016-07-07 19:40:21
【问题描述】:

我有 2 个变量,根据 if else 的某些情况,我要么使用带有第一个变量 variable1 的代码,要么使用带有第二个变量 variable2 的代码.

这两个变量都被声明为 final,我只在条件下分配它们,我对它们使用不同的语句。

关于如何禁用这两个语句的 android 警告的任何想法?

在 if 或 else 中初始化变量后,是否有任何其他方法可以在不使用 asserts检查变量是否具有值 null 的情况下执行此操作?

我非常确定我的代码确实可以工作,而且我无法使用未初始化的变量,我更喜欢只禁用这些语句而不是整个项目的警告的方法。

哪种方式是最好的实现方式?

private static class foo {

private final objectwhatever variable1;
private final objectwhatever variable2;

public foo(){

   if ( condition 1)
   {
          variable1 = new objectwhatever();
          statements in variable1
   } 

  else ( condition 2)
  {
          variable2 = new objectwhatever();
          statements in variable2
  } 

}
}

【问题讨论】:

  • 如果两个变量的类型相同,那么为什么要首先创建两个不同的变量?我不明白这里的用例。
  • 您没有提供准确(甚至有效)的代码。特别是,您可能没有“默认”其他条件。
  • 你为什么不只使用一个'objectwhatever'类型的变量并在你的构造函数中初始化它?
  • 长话短说,是同一类。一旦它通过 android native 导入,一个作为我的外部库。当 android native 不适用于高于或等于 18 的 api 级别时,我需要第二个。相信我,这些信息足以满足我想要的答案。该类虽然相同,但已重命名,因此它们不会冲突。

标签: java android android-studio android-lint


【解决方案1】:

final 变量必须在构造函数中或在构造函数之外分配一次。这是一条 Java 规则,您不能禁用错误警告。但是,如果你删除final,错误就会消失。

出于某种原因,您可能希望禁用所有 Android lints,即通过在您的类或方法中使用 @SuppressWarnings("ALL")

@SuppressWarnings("ALL")
private static class foo {

    private objectwhatever variable1;
    private objectwhatever variable2;
    ...
}

希望有帮助!

【讨论】:

  • 在每种情况下都为另一个变量添加了一个空赋值,忘记了每个最终变量至少应该分配一次。你的回答唤起了我的记忆,谢谢。
【解决方案2】:

如果你必须压制它,请使用@SuppressWarnings("InstanceVariableMayNotBeInitialized"),压制“ALL”有点矫枉过正。

【讨论】:

  • 我怎么知道代码中的警告叫什么,即 InstanceVariableMayNotBeInitialized 应该放在“”之间?
猜你喜欢
  • 2012-01-02
  • 2015-03-22
  • 1970-01-01
  • 2012-03-25
  • 2015-07-04
  • 1970-01-01
相关资源
最近更新 更多