用空String(null /“”)和String重载方法

时间:2018-10-18 20:34:59

标签: java

刚刚注册,这是我的第一个问题。我确实尝试过在这里和Google上进行搜索,但是找不到相关的答案。大多数答案(以及很多重复的问题)都是关于Java在对象和字符串之间进行选择(有时会选择整数)作为null值的默认值。

我正在尝试使用String参数重载方法,其中当没有输入(空String或“”)时调用不带参数的方法。基本上,这是一个简单的计分板,我只想在玩家在游戏结束时输入其姓名时才记录分数,否则仅显示现有的计分板。但是,即使使用空字符串,仍会添加用户条目。我知道我可以创建两种不同的方法,但是我正在尝试学习和实现方法重载。 “ listScoreBoard”是用于添加和显示计分板的二维ArrayList。

public static void displayScore (String playerName) {
    listScoreBoard.add(Arrays.asList(playerName, playerScore));
    displayScore();
}

public static void displayScore() {
    System.out.println(listScoreBoard);
}

我对Java和编程非常陌生(大学的第一学期),如果这是一个非常简单的问题,我深表歉意。

4 个答案:

答案 0 :(得分:0)

调用不带参数的字符串与带 null empty 参数的字符串是有区别的。当您在不提供任何参数的情况下调用该方法时,它将使用没有参数的方法。当您使用 null 空字符串调用该方法时,它将使用带有String参数的方法。

displayScore(null); // This calls displayScore (String playerName)
displayScore(""); // This calls displayScore (String playerName)

displayScore(); // This calls displayScore ()

答案 1 :(得分:0)

如果您致电,

displayScore("somestring") // first method is called
displayScore("") // first method is called
displayScore(null) // first method is called

displayScore() // second method is called

因此要调用第二个方法,必须不带参数地调用。也就是说,无论何时传递null或empty("")或某些字符串,都会调用第一个方法。

答案 2 :(得分:0)

添加条件,该条件将检查是否没有通过玩家名,这将绕过添加到listScoreBoard的操作。

const request1 = this.http.get('/api/hello'); //return an observable
const request2 = this.http.get('/api/there') //return an observable

forkJoin([request1,request2]).subscribe((response)=>{

    //after all the successful requests 
    //response.forEach((eachRes)=>{console.log(eachRes)});
    //or response[0] , response[1]


});

}

答案 3 :(得分:0)

  

我正在尝试使用String参数重载方法,其中当没有输入(空String或“”)时调用不带参数的方法

由编译器选择在编译时应调用两种方法中的哪一种。在运行时无法确定重载方法的选择。

由于编译器在运行时不知道该值,因此必须编写在字符串为null或为空时调用no-arg重载的逻辑。

public static void displayScore(String playerName) {
    if (playerName == null || playerName.isEmpty()) {
        displayScore();
        return;
    }
    listScoreBoard.add(Arrays.asList(playerName, playerScore));
    displayScore();
}

public static void displayScore() {
    System.out.println(listScoreBoard);
}

或者,因为即使是非空输入,您也呼叫displayScore()

public static void displayScore(String playerName) {
    if (playerName != null && ! playerName.isEmpty()) {
        listScoreBoard.add(Arrays.asList(playerName, playerScore));
    }
    displayScore();
}

public static void displayScore() {
    System.out.println(listScoreBoard);
}