Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在顶部的if中使用sp变量?_Java_Minecraft_Bukkit - Fatal编程技术网

Java 如何在顶部的if中使用sp变量?

Java 如何在顶部的if中使用sp变量?,java,minecraft,bukkit,Java,Minecraft,Bukkit,我正在使用API开发Minecraft Bukkit插件。 我遇到的问题是,我想在下面的代码中使用sp变量,以检查它是否在顶部的if语句中使用.isplay()(API的一种方法)播放。问题是,sp变量是在if语句中创建的。那么,当再次运行该方法时,如何在if语句中使用该sp变量呢 如果我不够清楚,告诉我。 另外,我对java还很陌生,所以请记住这一点 -贾斯特拉蒙 public void playTune(String eventTune, Player p) { if (Method

我正在使用API开发Minecraft Bukkit插件。 我遇到的问题是,我想在下面的代码中使用sp变量,以检查它是否在顶部的if语句中使用.isplay()(API的一种方法)播放。问题是,sp变量是在if语句中创建的。那么,当再次运行该方法时,如何在if语句中使用该sp变量呢

如果我不够清楚,告诉我。 另外,我对java还很陌生,所以请记住这一点

-贾斯特拉蒙

public void playTune(String eventTune, Player p)
{
    if (Methods.getSongPath(eventTune).exists()) //&& sp.isplaying()
    {
            Song s = NBSDecoder.parse(Methods.getSongPath(eventTune));
            SongPlayer sp = new RadioSongPlayer(s);
            sp.setAutoDestroy(true);
            sp.addPlayer(p);
            sp.setPlaying(true);
    }
    else
    {
            notFound(eventTune);
    }
}

首先,如果希望通过多次调用方法来访问对象,则需要对象的引用。因此,您应该在类中声明一个变量,如下所示:

然后按如下方式更改您的方法:

public void playTune(String eventTune, Player p)
{
    /*Creates sp if it is null (When it is null, we know that there is no
    RadioSongPlayer object referenced by sp)*/
    if (Methods.getSongPath(eventTune).exists()) && sp == null)
    {
            Song s = NBSDecoder.parse(Methods.getSongPath(eventTune));
            sp = new RadioSongPlayer(s);
            sp.setAutoDestroy(true);
            sp.addPlayer(p);
            sp.setPlaying(true);
    }
    else
    {
            notFound(eventTune);
    }
    //Now that sp is not null, we know that it references a SongPlayer object, that is,
    //the object we just created in the first if statement
    if(sp != null){ /
        //sp was created
        //Use sp
    }
}

我不建议你这样做。最好将第一个
if
重构为另一个方法,因为创建
SongPlayer
不应该是
playTune
方法的问题。

再想一想:只有当某些条件为真时,才需要创建对象。另一方面,在检查该条件时,您希望该对象已经存在。那根本不起作用。只需在then块中放置第二个if,在sp创建后立即对其进行检查。顺便说一句:不要使用单字符名称。他们什么也没说。最好叫他们player或songPlayer。。。
public void playTune(String eventTune, Player p)
{
    /*Creates sp if it is null (When it is null, we know that there is no
    RadioSongPlayer object referenced by sp)*/
    if (Methods.getSongPath(eventTune).exists()) && sp == null)
    {
            Song s = NBSDecoder.parse(Methods.getSongPath(eventTune));
            sp = new RadioSongPlayer(s);
            sp.setAutoDestroy(true);
            sp.addPlayer(p);
            sp.setPlaying(true);
    }
    else
    {
            notFound(eventTune);
    }
    //Now that sp is not null, we know that it references a SongPlayer object, that is,
    //the object we just created in the first if statement
    if(sp != null){ /
        //sp was created
        //Use sp
    }
}