Var*_*ism 2 java inheritance class multiple-inheritance
我知道这个问题已被问了一百万次,但我找不到合适的答案.
我有一大堆的使者方法,比如debug(String)和tell(CommandSender, String)我想使用各种类.这听起来简单易行,但是Java缺乏对多重继承的支持,这使得这个问题非常困难,因为那些已经不得不扩展其他东西的类.
接口将无法正常工作,因为接口不允许您实际实现放在其中的方法.
我曾考虑增加额外的参数的方法,使他们从一个静态的公共事业类工作,但是这使得该方法的调用,从去debug(String)到MessageUtil.debug(Plugin, String),这是更为庞大的比我想的.
我已经考虑过制作一个可以处理这些消息的Messenger对象,这样我就可以打电话messenger.debug(String),这更好,但是我不能动摇那种必须有更好的方法来debug(String)独处的感觉.
有什么建议?
编辑:遗憾的是,如果不添加额外的参数,这些方法就不能成为静态的.因此,静态导入将无法正常工作.
编辑:这是我尝试在多个类中使用的方法之一的示例.正如您可以通过使用非静态全局变量(如"plugin"和"debuggers")看到的那样,它不能成为静态的.
protected myPlugin plugin;
private myList<String> debuggers = new myList<String>();
public void debug(String message) {
if (debuggers.size() == 0)
return;
if (debuggers.contains("\\console")) {
plugin.getServer().getConsoleSender().sendMessage(plugin.getColor() + message);
if (debuggers.size() == 1)
return;
}
for (Player player : plugin.getServer().getOnlinePlayers())
if (debuggers.contains(player.getName()))
player.sendMessage(plugin.getColor() + message);
}
Run Code Online (Sandbox Code Playgroud)
这是另一个示例,使用与上面相同的全局变量向服务器上的每个播放器和控制台广播消息:
public void broadcast(String message) {
for (Player player : mCL.getServer().getOnlinePlayers())
player.sendMessage(plugin.getColor() + message);
mCL.getServer().getConsoleSender().sendMessage(message);
}
Run Code Online (Sandbox Code Playgroud)
编辑:broadcast()上面的方法实际上不是静态的; 这是一个复制粘贴错误.我已修改它以反映这一点.
特定
这使得对方法的调用从debug(String)变为MessageUtil.debug(Plugin,String),这比我想要的要大得多.
假设您的方法是静态的,或者可以是静态的,您可以使用static import-
import static mypackage.MessageUtil.debug;
//
debug("Hello");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
360 次 |
| 最近记录: |