[英]Get a variable from an abstract class
基本上,我想在主Mod类中的字符串中获取从“ World.class”播放的地图的名称...
public abstract class World implements IBlockAccess{
protected WorldInfo worldInfo;
//=====OtherStuff=====
public World(ISaveHandler par1ISaveHandler, String par2Str, WorldSettings par3WorldSettings, WorldProvider par4WorldProvider, Profiler par5Profiler, ILogAgent par6ILogAgent)
{
this.worldInfo.setWorldName(par2Str);
}
//=====OtherStuff=====
}
我与此同一个包中创建了一个类
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);
但是在启动时会崩溃...有什么想法吗?
World不是静态类...您需要一个World兼容对象的实例来获取名称。 一种获取世界实例然后命名的方法:
World world = Minecraft.getMinecraft().isIntegratedServerRunning() ? mc.getIntegratedServer().worldServerForDimension(Minecraft.getMinecraft().thePlayer.dimension) : Minecraft.getMinecraft().theWorld;
String worldName = world.getWorldInfo().getWorldName();
此代码应在客户端运行。
您尚未worldInfo
protected WorldInfo worldInfo; // initialization MISSING!
因此,当您尝试实例化World_Spy
调用其父类构造函数World()
,会在以下位置获得NullPointerException
this.worldInfo.setWorldName(par2Str); // NullPointerException here
要解决此问题,只需提供一个实例
protected WorldInfo worldInfo = new WorldInfo();
我相信通过在此处抛出NullPointerException
来“崩溃”:
this.worldInfo.setWorldName(par2Str);
实际上,变量worldInfo
从未通过您尝试调用其方法setWorldName()
来初始化。 由于此时变量为null
,因此抛出NullPointerException
听起来很合理。
在Java中(就像我所知道的所有其他编程语言一样),必须在使用变量之前对其进行初始化。 实际上,默认情况下,原始类型是使用某种“正常”值初始化的。 但是,自定义类型的变量被初始化为null
,这可能会使初学者感到困惑。
要初始化,您必须在构造函数调用之后使用new
关键字:
worldInfo = new WorldInfo();
现在您可以调用setter和worldInfo
其他方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.