0

是否可以从另一个类中读取“worldInfo”?

以下是持有它的类的一部分:

    public abstract class World implements IBlockAccess{
    protected WorldInfo worldInfo;
    //=====Stuff=====
    public World(ISaveHandler par1ISaveHandler, String par2Str, WorldSettings par3WorldSettings, WorldProvider par4WorldProvider, Profiler par5Profiler, ILogAgent par6ILogAgent)
        {
        this.worldInfo.setWorldName(par2Str);
        }
}

我想在我的课堂上使用它来获取名称。“worldInfo.getWorldName”

编辑 1:好的,我在与 World 相同的包中创建了一个类。“World_Spy.class”

public class World_Spy extends World{

    public World_Spy(ISaveHandler par1iSaveHandler, String par2Str,
            WorldProvider par3WorldProvider, WorldSettings par4WorldSettings,
            Profiler par5Profiler, ILogAgent par6iLogAgent) {
        super(par1iSaveHandler, par2Str, par3WorldProvider, par4WorldSettings,
                par5Profiler, par6iLogAgent);
    }

    @Override
    protected IChunkProvider createChunkProvider() {
        return null;
    }

    @Override
    public Entity getEntityByID(int i) {
        return null;
    }


    String TheName = "";
    public void gotIt(){
        TheName = this.worldInfo.getWorldName();
        System.out.println(TheName);
    }

}

但是当我从主类调用它时,它会使游戏崩溃..

World_Spy WName = new World_Spy(null, null, null, null, null, null);

和参数有关吗?

4

5 回答 5

0

实际上,protected意味着它可以被子类使用,也可以被同一个包中的任何其他类使用。所以是的,你可以在同一个包中的所有类中使用它,即使它们不是抽象类的子类

于 2013-08-25T10:50:43.280 回答
0

如果满足以下条件之一,则可以直接访问该字段:

  • 另一个类扩展World(继承的受保护字段在派生类中可见,也不World是最终的并且具有非私有构造函数)
  • 另一个类属于同一个包(受保护的字段在来自同一个包的类中可见,与包私有相同)。

在将该字段的可访问属性设置为 true后,也可以通过任何其他类的反射访问该字段(只要安全管理器允许)。

于 2013-08-25T11:18:52.337 回答
0

为了访问worldInfo,您必须扩展WorldworldName设置为World构造函数的第二个参数,这意味着您必须在子类中知道它,所以..

于 2013-08-25T10:40:11.920 回答
0

对于您想要的功能,要么将关键字 protected 更改为 public,要么在类中创建一个公共函数。它看起来像这样:

public String getWorldName(){ this.worldInfo.getWorldName(); }

于 2013-08-25T10:42:50.067 回答
0

该类是abstract,因此无法启动。您可以从此类中读取static变量,但不能创建此类的对象。您可以将此变量设置为static,然后读取它或继承此类并使其成为对象或使其成为非abstract对象并使其成为对象。

这个变量保持不变?让它static

于 2013-08-25T10:48:16.467 回答