【问题标题】:Declare a variable inside an if statement and have it known to following method calls在 if 语句中声明一个变量,并让后续方法调用知道它
【发布时间】:2013-09-27 04:29:48
【问题描述】:

我正在用 Android 编写一些东西,为了适应较旧的 SDK,我需要更改变量的形式。我正在使用ClipboardManager,它具有基于 SDK 的不同版本。问题是创建这个变量很容易,我必须在 if 中进行,并且由于未检测到变量,我的代码将无法编译。

例子:

if(android.os.Build.VERSION.SDK_INT >= 11){
    final android.content.ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
} else {
    final android.text.ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
}
if (clipboard.hasPrimaryClip()) {
    // Do stuff
}

因为剪贴板的实例依赖于SDK,if (clipboard.hasPrimaryClip())向我抱怨。

除了生成两个变量并检查是否为空之外,还有其他方法吗?

【问题讨论】:

  • 我不是 Android 专家,但根据我找到的文档,android.text.ClipboardManager 没有 hasPrimaryClip 方法。所以如果版本是 clipboard.hasPrimaryClip() 做什么?
  • @ajb 你说得对,旧 API 应该是 getText(),但这只是举例。
  • 好吧,如果你必须为if...else 的两个不同分支调用一个不同命名的方法,那么我看不出你认为你能怎么做if 之外的方法调用。但是,如果您要调用两者中确实 存在的某个方法,则可以将其声明为android.text.ClipboardManager(在if 之外),因为该变量仍然能够保存一个android.content.ClipboardManager 因为它是一个子类。
  • 好的,我会替换它。关键是那只是一个例子,我没想到那个方法只是那个 API+。

标签: java android clipboardmanager


【解决方案1】:

将其声明为类成员

ClipboardManager clipboard;

然后

if(android.os.Build.VERSION.SDK_INT >= 11){
clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
}else {
 clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
}
 if (clipboard.hasPrimaryClip()) {
// Do stuff
}

Eidt 编辑过的问题

   if(android.os.Build.VERSION.SDK_INT >= 11){
     final android.content.ClipboardManager clipboard =  (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
       if (clipboard.hasPrimaryClip()) {
        // Do stuff
        doSomething(); 
       }
   } else {
     final android.text.ClipboardManager clipboard =(ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
      if (clipboard.hasPrimaryClip()) {
        // Do stuff
        doSomething(); 
       }
   }

然后

 public void doSomething()
 {

 }  

【讨论】:

  • 好的,由于这个答案,我意识到我的问题并不清楚。让我编辑一下。
  • @Zackehh9lives 如果我理解正确,您需要声明具有类范围的变量,以便它在整个类中可用。不需要两个变量。
  • 这是我的错,我没有表明 ClipboardManager 每次都是从不同的包中导入的。检查更新的问题。
  • 但是我如何覆盖我将剪贴板声明为不同类的实例这一事实?
  • @Zackehh9lives 在这种情况下,您需要有两个变量并在 if 部分和 else 部分检查您的条件
猜你喜欢
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多