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

「スクリプトは ZergZ/ZTeleport.java にあります」と言います。これは、クラスZTeleportがパッケージに属していることを意味しますZergZ。しかし、あなたはそれを別のパッケージに属していると宣言しましたZergZ.ZTeleport.

2 番目の例では、ソース ファイルは custom/HeroCirclet/HeroCirclet.java にあり、パッケージ宣言と一致し、名前の競合は発生しないと思います。

ソースファイル (通常は Java ソースファイルを「スクリプト」とは呼びません) を、宣言されたパッケージと一致するディレクトリに移動するか、パッケージ宣言をその場所に一致するように変更する必要があります。

于 2012-09-02T15:33:51.593 に答える
2

これZTeleportは、ZergZ パッケージで名前が付けられたクラスと、名前が付けられたパッケージがあるためですZergZ.ZTeleport

このpackage名前は基本的に、Java ファイルが置かれているプロジェクト ディレクトリです。

つまりZTeleport.javaZergZディレクトリにある場合、パッケージ名は

package ZergZ;

パッケージ宣言でクラス名を指定せず、ディレクトリは.ディレクトリ フォルダー トークンではなく、ディレクトリ フォルダー トークンで区切られます。

于 2012-09-02T15:00:06.723 に答える
1

ここでの衝突は、同じパッケージ名とクラス名の間です。通常の命名規則 (パッケージの名前を小文字で開始し、クラスの名前を大文字で開始する) に固執する場合は、そのような状況を避ける必要があります。

于 2012-09-02T15:01:21.950 に答える
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 に答える
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 に答える