我目前正在寫一個私人的Java API爲自己使用Class
的允許API的某些部分(統計數據保留部分),而不改變底層的使用可以延長。我喜歡這個方法,但由於某些原因,每當API試圖執行theClass.newInstance()
,它引發錯誤像這樣:的Java的newInstance拋出錯誤,它應該不
java.lang.IllegalAccessError: tried to access method me.duper51.DuperFramework.utils.player.StatsObject.<init>()V from class me.duper51.Skyrings.stats.SkyringsStats
at me.duper51.Skyrings.stats.SkyringsStats.<init>(SkyringsStats.java:14) ~[?:?]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_131]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_131]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_131]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_131]
at java.lang.Class.newInstance(Class.java:442) ~[?:1.8.0_131]
at me.duper51.DuperFramework.utils.player.PlaygroundPlayer.getStats(PlaygroundPlayer.java:71) ~[?:?]
at me.duper51.Skyrings.listeners.GameListener.lambda$getReplacements$0(GameListener.java:65) ~[?:?]
at me.duper51.DuperFramework.utils.scoreboard.SidebarOption.update(SidebarOption.java:44) ~[?:?]
at me.duper51.DuperFramework.utils.scoreboard.SidebarOption.update(SidebarOption.java:53) ~[?:?]
at me.duper51.DuperFramework.utils.scoreboard.SidebarManager.updateAll(SidebarManager.java:75) ~[?:?]
at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftTask.run(CraftTask.java:71) ~[spigot.jar:git-Spigot-21fe707-e1ebe52]
at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:350) [spigot.jar:git-Spigot-21fe707-e1ebe52]
at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:723) [spigot.jar:git-Spigot-21fe707-e1ebe52]
at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot.jar:git-Spigot-21fe707-e1ebe52]
at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot.jar:git-Spigot-21fe707-e1ebe52]
at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot.jar:git-Spigot-21fe707-e1ebe52]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_131]
me.duper51.Skyrings.stats.SkyringsStats
哪裏是擴展的類,和me.duper51.DuperFramework.utils.player.StatsObject
是基類。
擴展的對象看起來像下面這樣:
public class SkyringsStats extends StatsObject {
public SkyringsStats() {
super();
}
private int kills = 0;
private int wins = 0;
private int totalPlays = 0;
private int deaths = 0;
public void incrementKills() {
kills++;
}
public void incrementDeaths() {
deaths++;
}
public void incrementTotalPlays() {
totalPlays++;
}
public void incrementWins() {
wins++;
}
public int getKills() {
return kills;
}
public int getWins() {
return kills;
}
public int getDeaths() {
return kills;
}
public int getGamesPlayed() {
return kills;
}
}
作爲另一個答案的要求,這是javap -p me.duper51.DuperFramework.utils.player.StatsObject
Compiled from "StatsObject.java"
public class me.duper51.DuperFramework.utils.player.StatsObject {
private java.util.UUID pUUID;
public me.duper51.DuperFramework.utils.player.StatsObject();
void setpUUID(java.util.UUID);
public void commitChanges(me.duper51.DuperFramework.GamePlugin);
private static void lambda$commitChanges$0();
}
我只是反編譯,這是在使用的JAR文件。 StatsObject的默認構造函數按預期公開。 – duper51
可以運行'的javap -p me.duper51.DuperFramework.utils.player.StatsObject'用適當的類路徑,並顯示在你的答案的方法簽名? – EJP
'從 「StatsObject.java」 公共類me.duper51.DuperFramework.utils.player.StatsObject { 私人java.util.UUID中pUUID編制; public me.duper51.DuperFramework.utils.player.StatsObject(); void setpUUID(java.util.UUID); public void commitChanges(me.duper51.DuperFramework.GamePlugin); private static void lambda $ commitChanges $ 0(); } ' – duper51