包与一个类型冲突

时间:2012-09-02 14:52:58

标签: java

  

可能重复:
  eclipse 3.4 (ganymede) package collision with type

我是java的新手,但我尝试为游戏Lineage2编写脚本。

下载代码:

package ZergZ.ZTeleport;
import javolution.util.FastMap;
import com.l2jserver.Config;
import com.l2jserver.gameserver.handler.IVoicedCommandHandler;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2jserver.gameserver.model.Location;
import com.l2jserver.gameserver.handler.VoicedCommandHandler;

public class ZTeleport implements IVoicedCommandHandler
{
    private static final String[] VOICED_COMMANDS =
    {
        "teleport"
    };
    @Override
    public boolean useVoicedCommand(String command, L2PcInstance activeChar, String params)
    {
        if (activeChar == null)
            return false;

        if (params.equalsIgnoreCase("aden"))
        {
            activeChar.teleToLocation(147736,-56243,-2781);
        }
        if (params.equalsIgnoreCase("gracia"))
        {
            activeChar.teleToLocation(-186742,244167,2675);
        }
        if (params.equalsIgnoreCase("pvp1"))
        {
            activeChar.teleToLocation(147736,-56243,-2781);
        }
        if (params.equalsIgnoreCase("pvp2"))
        {
            activeChar.teleToLocation(179337,221937,4475);
        }

    }
    @Override
    public String[] getVoicedCommandList()
    {
        return VOICED_COMMANDS;
    }


}

当服务器启动java时说: 1. \ ZTeleport.java中的错误(第17行)
    包ZergZ.ZTeleport;
    ^^^^^^^^^^^^^^^^^^^^
ZergZ.ZTeleport包与类型

冲突

该脚本位于ZergZ / ZTeleport.java

我会给你另一个工作正常的脚本:

package custom.HeroCirclet;

import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.model.quest.QuestState;

public class HeroCirclet extends Quest
{
______
}

感谢。

5 个答案:

答案 0 :(得分:2)

这是因为你在ZergZ包中有一个名为ZTeleport的类和一个名为ZergZ.ZTeleport的包。

package名称基本上是Java文件所在的项目目录。

这意味着如果ZTeleport.java位于ZergZ目录中,则包名称为

package ZergZ;

您没有在包声明上指定类名,并且目录由.而不是目录文件夹标记分隔。

答案 1 :(得分:2)

你说“脚本位于ZergZ / ZTeleport.java”。这意味着类ZTeleport属于包ZergZ。但是您已声明它属于另一个包ZergZ.ZTeleport

在你的第二个例子中,我敢打赌源文件位于custom / HeroCirclet / HeroCirclet.java中,它与包声明匹配,并且不会产生命名冲突。

您需要将源文件(人们通常不会将java源文件“脚本”,btw)调用到与其声明的包匹配的目录中,或者更改包声明以匹配其位置。

答案 2 :(得分:1)

此处的冲突位于您的包名和您的类名之间,它们是相同的。如果你坚持通常的命名约定(用起始小写命名你的包,用起始大写字母命名你的类),你应该避免这种情况。

答案 3 :(得分:0)

您应遵循Java命名约定。将您的包裹更改为:

package zergZ.zTeleport; // all name is begin with lower

// no change, but for clearer : all class name should begin with higher character  
public class ZTeleport implements IVoicedCommandHandler 
{
}

在那之后,当然,您应该刷新或/并重建您的项目,看它是否有效。

希望这有帮助:)

答案 4 :(得分:0)

如果你看到它说的错误......

package ZergZ.ZTeleport;
           ^^^^^^^^^^^^^^^^^^^^
The package ZergZ.ZTeleport collides with a type

所以基本上你已经在命名类和包的方式之间产生了冲突。如果你坚持使用java约定,你可以将它们命名为:

// Notice the first character of package name is small character
package zergZ.zTeleport;

//  Class Name's first character is capital.
public class ZTeleport implements IVoicedCommandHandler{ 
    .. 
}