本帖最后由 DreamVoid 于 2021-7-22 20:09 编辑
已解决
最后我实在没有办法,全部弄成static了
复制代码
以上写法,编译时没有问题,而在使用的时候就会出现
复制代码
想知道为什么这样写是有问题的,及正确的写法应该是怎样的
已解决
最后我实在没有办法,全部弄成static了
- package me.dreamvoid.miraimc.internal;
- import me.dreamvoid.miraimc.bukkit.BukkitPlugin;
- import me.dreamvoid.miraimc.bungee.BungeePlugin;
- import java.util.logging.Logger;
- public class Utils {
- private final Logger Logger;
- private static Utils Instance;
- public Utils(BukkitPlugin plugin){
- Logger = plugin.getLogger();
- Instance = this;
- }
- public Utils(BungeePlugin bungee){
- Logger = bungee.getLogger();
- Instance = this;
- }
- public static Logger getLogger() {
- return Utils.Instance.Logger;
- }
- }
以上写法,编译时没有问题,而在使用的时候就会出现
- [18:33:17 ERROR]: [org.bukkit.craftbukkit.v1_17_R1.CraftServer] Cannot read field "Logger" because "me.dreamvoid.miraimc.internal.Utils.Instance" is null initializing MiraiMC v1.2 (Is it up to date?)
- java.lang.NullPointerException: Cannot read field "Logger" because "me.dreamvoid.miraimc.internal.Utils.Instance" is null
- at me.dreamvoid.miraimc.internal.Utils.getLogger(Utils.java:24) ~[?:?]
- at me.dreamvoid.miraimc.internal.Config.<init>(Config.java:39) ~[?:?]
- at me.dreamvoid.miraimc.bukkit.BukkitPlugin.onLoad(BukkitPlugin.java:23) ~[?:?]
想知道为什么这样写是有问题的,及正确的写法应该是怎样的
本帖最后由 结冰的离季 于 2021-7-22 20:16 编辑
不建议在构造方法里使用this赋值
不建议在构造方法里使用this赋值
本来就该弄成static啊。。
已解决个鬼
static方法在调用时会绕过构造方法,Instance根本没有被赋值
还有推荐在用到logger的每个类都分别获取一次logger,可以更方便地找到有问题的类
static方法在调用时会绕过构造方法,Instance根本没有被赋值
还有推荐在用到logger的每个类都分别获取一次logger,可以更方便地找到有问题的类
强烈建议使用:public static final xxUtil INSTANCE=new xxUtil();
另外,变量的命名规范属于java基础知识
本帖最后由 DreamVoid 于 2021-7-22 22:20 编辑
其实我根本不需要用到Instance,甚至Utils也没必要加,用这个只是为了调用更方便
这是我改好以后的代码,要输出日志了直接Utils.Logger
复制代码
1310784365 发表于 2021-7-22 20:34
已解决个鬼
static方法在调用时会绕过构造方法,Instance根本没有被赋值
其实我根本不需要用到Instance,甚至Utils也没必要加,用这个只是为了调用更方便
这是我改好以后的代码,要输出日志了直接Utils.Logger
- package me.dreamvoid.miraimc.internal;
- import me.dreamvoid.miraimc.bukkit.BukkitPlugin;
- import me.dreamvoid.miraimc.bungee.BungeePlugin;
- import java.util.logging.Logger;
- public class Utils {
- public static Logger Logger;
- public Utils(BukkitPlugin plugin){
- Logger = plugin.getLogger();
- }
- public Utils(BungeePlugin bungee){
- Logger = bungee.getLogger();
- }
- }
byxiaobai 发表于 2021-7-22 21:19
另外,变量的命名规范属于java基础知识
其实,java 命名的规范,基本上遵守的是驼峰命名。
其中,楼主所使用的是大驼峰法,我们和大部分的人用的是小驼峰。具体解释如下:
Sky_God_ 发表于 2021-7-23 08:36
其实,java 命名的规范,基本上遵守的是驼峰命名。
其中,楼主所使用的是大驼峰法,我们和大部分的人用的 ...
大驼峰能用来声明局部变量?
本帖最后由 DreamVoid 于 2021-7-25 15:13 编辑
所以你会发现我给开发者调用的方法都是小驼峰法,这些插件内部调用我自己看着就行
byxiaobai 发表于 2021-7-23 13:27
大驼峰能用来声明局部变量?丑的要命
所以你会发现我给开发者调用的方法都是小驼峰法,这些插件内部调用我自己看着就行