【问题标题】:Bound Parameter Type to only accept Context Object not Activity Object绑定参数类型只接受上下文对象而不是活动对象
【发布时间】:2020-06-24 06:32:06
【问题描述】:
public static <T extends Context> APIInterface getServiceInstance(T context) {

    if (apiInterface == null) {

      // do Something
    }

    return apiInterface;
}

此方法当前正在接受所有对象 .. Activity.this .. getApplicationContext()、getContext() 和 getBaseContext()

我们能否限制此方法只接受 Context 对象作为参数/不接受 Activity。

谢谢

【问题讨论】:

  • Context is abstract。您可以拥有的唯一实例将是子类。
  • 我可以使用这些方法 getApplicationContext()、getContext() 和 getBaseContext()。但不是活动对象。有什么方法可以绑定/限制参数。
  • 这个实现是对的,activity也是Context的子类

标签: android android-context bounded-wildcard


【解决方案1】:
if (!context instanceof Activity) {
      //Your code
   }else{
      throw new RuntimeException("Text exception");
  }

此代码验证上下文不是活动上下文。

【讨论】:

  • 我可以在方法体内部做这个验证。但是我说的是限制参数本身。因此,如果有人调用此方法,例如 getServiceInstance (Activity.this)。他必须得到编译时错误。我怎么能做到这一点:)。
  • 这恐怕是不可能的,最好检查一下上下文是否不是activity上下文,否则抛出异常
  • 你为什么不想进行类型检查并抛出异常?
  • 您方法中的问题是,如果我将在我的项目中在不同的类上调用此方法 200 次。我需要在任何地方处理该异常。我能找到的替代方案。但我在想也许我可以在这里得到一些有效的方法。其次,使用您上面的代码,我们将得到编译时错误。只需少量修改 if (!(context instanceof Activity)) { } else throw new RuntimeException("");
  • 为什么需要检查活动上下文?
猜你喜欢
  • 1970-01-01
  • 2012-11-19
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多