【问题标题】:implicitly pass parameters to class隐式传递参数给类
【发布时间】:2010-10-29 13:31:04
【问题描述】:

我正在 Android 中编写一个类,它需要调用其函数的类中的某些参数。

例如,我的班级被称为“DoStuff”

DoStuff 有 3 个功能:

public static doThis(canvas, tick, toggle, something);
public static doThat(canvas, tick, toggle, something, something);
public static doTheOther(canvas, tick, toggle, something, something, something);

当我从其他地方(DoStuff 不知道某个地方)调用它的功能时,有没有办法让我将画布、勾选和切换隐式传递给“DoStuff”。

【问题讨论】:

    标签: android class parameters


    【解决方案1】:

    这样设计是个糟糕的主意。为什么不从中创建一个适当的类并实例化它呢?

    仅当函数本身不依赖于某些类变量时,才应使用静态函数。因此,为了彻底解决它并且不冒从应用程序的不同部分调用它之间发生某种内存泄漏/冲突的风险,您基本上必须保持它已经拥有它的方式并将每个必要的参数传递给函数,或创建一个类(使用非静态函数),使用您想要的值对其进行实例化,然后仅将 something 值传递给函数。

    除此之外,没有干净的解决方案。我建议您不要将这些值存储到public static,因为这可能会导致 GC 无法释放/清理某些内容,因为 Canvas 仍分配在静态字段中,或者一个应用程序可能会将其设置为值,然后另一个也这样做并覆盖第一个应用程序/活动设置,当第一个应用程序再次调用函数时,它会得到不可预测的结果。

    只是一个问题作为旁注:如果这三个变量经常使用/传递,为什么要保持静态?非静态在面向对象编程方面更有意义

    【讨论】:

      【解决方案2】:

      您可以做的最好的事情是将它们定义为 DoStuff 类中的全局变量,并仅在需要时设置它们,并让所有函数从这些全局变量中获取值。这样一来,您就可以仅在必要时通过不同的方法更改它们。

      这样,您可以设置一次并在不同时间使用它们,但是您必须确保这些值在运行时不为空,根据您希望如何分类,需要进行一些修改才能始终存在这些值行为。

      【讨论】:

      • 我明白你的意思,这可以工作,但我如何在那里定义一个非空画布?
      • 定义的时候可以给它分配一个空的Canvas对象。
      【解决方案3】:

      只需要三个不同的构造函数来传递参数并在实例化之前选择正确的一个,然后调用你想要的方法。

      【讨论】:

      • 我没有实例化它,它的所有功能都是静态的。
      猜你喜欢
      • 2018-06-03
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      相关资源
      最近更新 更多