小编Jos*_*man的帖子

纯方法必须是静态的吗?

我现在正在编写一本教科书,它将纯方法定义为:

"一种静态方法,仅取决于其参数而不依赖于其他数据"

如果一个实例方法不是静态的(只要它不修改参数并且没有像打印那样的"副作用"),那么它是不可能的?

我知道纯方法是纯粹的,返回值只取决于参数而不依赖于任何其他状态,所以可能调用实例方法意味着从调用方法的对象中获取的变量不算作参数但作为另一个"状态"?

除此之外,我无法想到为什么非静态方法不能成为纯方法.

这是一个例子:

public class Rational {

    private int numer;
    private int denom;

    public Rational() {
        this.numer = 0;
        this.denom = 1;
    }

    public Rational(int numer, int denom) {
        this.numer = numer;
        this.denom = denom;
    }
}
Run Code Online (Sandbox Code Playgroud)

以上定义了一个Rational

然后,您可以在Rational类中编写一个方法,该方法通过下面的"方法一"或"方法二" 返回一个Rational对象double.

方法一:

public double toDouble() {
    double x = this.numer;
    double y = this.denom;
    double fprat = x / y;
    return fprat;
}   
Run Code Online (Sandbox Code Playgroud)

方法二:

public static double toDouble(Rational …
Run Code Online (Sandbox Code Playgroud)

java semantics

28
推荐指数
4
解决办法
3562
查看次数

创建一个新的对象类或编写一个转换子类对象的方法?或者是其他东西?表现不是偏好

我把两个单独的程序放在一起,玩一个名为'Crazy Eights'的纸牌游戏.

我为这个程序编写的类基于一个默认的"card"包,它提供了扑克牌对象和扑克牌的一些通用方法.

我采取了两种不同的方法来实现这一点,这些方法本身都是功能性的.

这是两个UML类图,描述了两种方法:

继承子类'转换'方法

在此输入图像描述

具有类似方法的组合子类

在此输入图像描述

正如你在方法1中看到的,EightsCard类包含一个方法转换(Card)这里是方法:

  /**
   * Converts a Card into an EightsCard
   * @param card The card to be converted
   * @return The converted EightsCard
   */
   public EightsCard convert(Card card) {
     if (card != null) {
     EightsCard result = new EightsCard(card.getRank(), card.getSuit());
     return result;
     } 
     return null;
   }
 }
Run Code Online (Sandbox Code Playgroud)

此方法允许您从CardCollection调用方法,否则这些方法将不合法.例如,在EightsPlayer类的play方法中如下所示:

  /**
   * Removes and returns a legal card from the player's hand.
   */
  public EightsCard play(Eights eights, EightsCard prev) {
    EightsCard ecard = new EightsCard(0, 0); …
Run Code Online (Sandbox Code Playgroud)

java composition

19
推荐指数
2
解决办法
336
查看次数

将 BottomNavigationView 与 NavController 一起使用时的动画问题,并且每个 Fragment 都有自己的工具栏

我正在使用一些最新的 Android Jetepack 组件在 Kotlin 中开发一个应用程序。我最近在以下案例中遇到了一些麻烦:

使用BottomNavigationViewwith时似乎会出现此问题NavController,并且当每个Fragment都有自己的Toolbar. 问题是,当从 Fragment A 过渡到 Fragment B 时,Fragment AB 中标题ActionBar 导航图标的更改会更新。理想情况下,为了平滑过渡,Fragment A 中 AppBar 的状态不会发生变化。我怀疑这可能源于这些属性不“属于”的事实,因为这似乎不会以相同的方式影响工具栏的菜单项。Toolbar

AppBar 标题的解决方法是在其各自的 fragment_layout.xml 中设置每个 Toolbar 的 title 属性,同时还从 navFragment.xml 中删除 label 属性(通常负责在使用导航控制器)。

但是,这并不能解决 actionBar 导航图标的问题,例如 Up / Home 按钮,它们不会出现在顶级目的地,但会出现在其他目的地。所以就我而言,它看起来仍然很糟糕。

我已按如下方式连接导航:

主活动.kt

class MainActivity : AppCompatActivity() {

    lateinit var appBarConfiguration: AppBarConfiguration
    lateinit var navController: NavController

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val binding: MainActivityBinding …
Run Code Online (Sandbox Code Playgroud)

android-animation android-actionbar android-toolbar bottomnavigationview android-jetpack-navigation

7
推荐指数
0
解决办法
129
查看次数

如何在 DAO 中引用可搜索的 FTS4 表而不会出现编译器错误?

android [FTS4 文档][1] for android 声明“此类将在数据库中具有映射 SQLite FTS4 表”。我应该将其解释为只需添加注释即可生成映射 SQLite FTS4 表,还是意味着我需要提供某种映射表以将 FTS4 实体类“连接”到虚拟 FTS4 表?

我目前假设是前者。如果这是正确的,那么我如何在实际中使用这个映射表?我觉得这样说是对的,当你创建一个带有FTS4注解的实体时,它会生成一个普通表和一个映射表,这两个表实际上都不是一个可以用MATCH函数查询的虚拟FTS4表。那么映射表究竟映射到什么?!在运行时实现的一些假设的虚拟 FTS4 外部内容表,可能是在数据库回调或迁移期间?在这种情况下,我应该如何在我的 DAO 中引用可搜索的 FTS4 表而不会出现编译器错误?

解决了:

事实证明,前一种解释是正确的,生成的映射表包括全文搜索所需的虚拟表。我仍然认为文档可以更清楚地说明这一点,但最终真正的潜在问题是我的房间依赖不是最新的。哦!

sqlite android full-text-search fts4 android-room

3
推荐指数
1
解决办法
1550
查看次数