0

可能重复:
eclipse 3.4(ganymede)包与类型冲突

我是 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
{
______
}

谢谢。

4

5 回答 5

2

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

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

这意味着如果ZTeleport.javaZergZ目录中,那么包名是

package ZergZ;

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

于 2012-09-02T15:00:06.723 回答
2

你说“脚本位于 ZergZ/ZTeleport.java”。这意味着该类ZTeleport属于包ZergZ。但是您已将其声明为属于不同的包,ZergZ.ZTeleport.

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

您要么需要将源文件(人们通常不将 java 源文件称为“脚本”,顺便说一句)移动到与其声明的包匹配的目录中,要么更改包声明以匹配其位置。

于 2012-09-02T15:33:51.593 回答
1

这里的冲突是在你的包名和你的类名之间,它们是相同的。如果您坚持通常的命名约定(以小写开头命名您的包和以大写开头命名您的类),您应该避免这种情况。

于 2012-09-02T15:01:21.950 回答
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 
{
}

在那之后,当然,您应该刷新或/并重建您的项目以查看它的工作原理。

希望这有帮助:)

于 2012-09-02T15:03:16.487 回答
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{ 
    .. 
} 
于 2012-09-02T15:40:11.743 回答