我是一个Java新手,遇到了一些问题。我想要一堂课成为另一堂课。很难用抽象的方式来解释它,所以我给你举个例子。
public class WorldGuard extends WorldGuardPlugin {
public WorldGuard(Plugin parent) {
WorldGuardPlugin plugin = parent.getServer().getPluginManager().getPlugin("WorldGuard")
// make plugin the actual class
}
}
WorldGuard
应该像某种包装器一样。构造时,它会获得一个参数parent
,在该参数的基础上找到WorldGuardPlugin
的实例。该类现在应该成为该实例。
它在JavaScript中很简单,我只返回实例,但我无法在Java中执行此操作。
答案 0 :(得分:2)
我不太确定你要做什么。一堂课不能“成为另一堂课”。但也许你的问题只是在你应该使用普通函数时尝试使用构造函数。也许你想要做的是:
public class WorldGuard extends WorldGuardPlugin
{
public static WorldGuard getFromPlugin(Plugin parent)
{
return (WorldGuard) parent.getServer().getPluginManager().getPlugin("WorldGuard");
}
}
这将通过父对象获取对象并将其作为WorldGuard对象返回。
答案 1 :(得分:1)
班级不能成为其他班级。
我认为你可以选择以下几种可能性。
WordGuard
类将包装其他类的实际实例并委托所有调用。 答案 2 :(得分:1)
您应该调用WorldGuardPlugin
的复制构造函数。我的意思是WorldGuardPlugin
应该有一个构造函数,可以创建类的给定实例的副本,如:
WorldGuardPlugin pg = new WorldGuardPlugin(anInstance);
如果是这种情况那么你很幸运。你可以这样做:
public class WorldGuard extends WorldGuardPlugin {
public WorldGuard(Plugin parent) {
super( parent.getServer().getPluginManager().getPlugin("WorldGuard"));
}
}
这将使" WorldGuard在某种程度上像某种包装一样"。您仍然可以在WorldGuardPlugin
的实例上调用WorldGuard
中定义的方法,同时可以向WorldGuard
本身添加方法。
答案 3 :(得分:0)
您无法更改构造函数中正在构造的对象的类型。根据定义,构造函数构造该类(例如A
的构造函数创建类型A
)。
在您的示例中,WorldGuard
扩展了WorldGuardPlugin
,这意味着WorldGuard
是WorldGuardPlugin
的一种类型。也许有一种方法可以使用您想要的属性初始化WorldGuardPluin
类(使用构造函数中的super
调用)。