在运行时覆盖方法操作

时间:2017-06-18 09:34:07

标签: java methods reflection classloader

我正在开发一款具有mod的游戏,并希望达到Quake所达到的效果。当mod文件夹包含与股票代码中的文件同名的文件时,文件将被覆盖 但是我希望实现稍微不同/更好的东西。我希望能够执行上一个操作,但如果在覆盖文件中没有实现特定方法,则使用股票代码中提供的默认方法。

我正在考虑创建具有人们需要的所有抽象方法的抽象类,然后将实现存储在单独的文件中。但是,我不知道如何获取此文件然后将其“附加”到抽象实现,如C / C ++与标题和源代码一样。此外,我如何执行此操作,但如果未在 secondary 植入中指定,则还包括 my 实现中的方法。

所以我的问题是,是否有办法在运行时覆盖类及其方法的实现,给定包含重写类/方法的文件的位置?甚至更好,(在顶部有一个樱桃),我能以某种方式在同一运行时阶段之间无缝地在实现之间来回交换吗? (可能在这里要求太多)

想要做的事情是这样的:(伪代码,显然不正确)

if (foo) {
    Class c = Class.load("/mods/foobar/Main.java").executeMethod("main", 314, "foobar");
} else {
    // more of the above
}

因为那时我的整个游戏将基于try-catch以上每个单一方法的for (int j = 0; j < timeList.Count; j++) { OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Kyle\Desktop\UAVbrook\brook\UAV\UAV\Readings.mdb;Persist Security Info=False"); String strSQL = "Insert into UAVData(Day,Time,Latitude,Longitude,Altitude,Temperature,Windspeed) values(1,@timeList[j].InnerText, @latList[j].InnerText, @longList[j].InnerText, @altList[j].InnerText, @tempList[j].InnerText, @windList[j].InnerText)"; OleDbCommand CmdSql = new OleDbCommand(strSQL, con); CmdSql.CommandType = CommandType.Text; CmdSql.Parameters.AddWithValue("@Day", 1); CmdSql.Parameters.AddWithValue("@Time", Convert.ToInt64(timeList[j].InnerText)); CmdSql.Parameters.AddWithValue("@Latitude", Convert.ToDouble(latList[j].InnerText)); CmdSql.Parameters.AddWithValue("@Longitude", Convert.ToDouble(longList[j].InnerText)); CmdSql.Parameters.AddWithValue("@Altitude", Convert.ToDouble(altList[j].InnerText)); CmdSql.Parameters.AddWithValue("@Temperature", Convert.ToDouble(tempList[j].InnerText)); CmdSql.Parameters.AddWithValue("@Windspeed", Convert.ToDouble(windList[j].InnerText)); con.Open(); try { CmdSql.ExecuteNonQuery(); } catch (Exception ex) { ex.Message.ToString(); } finally { con.Close(); CmdSql.Dispose(); } } 系统。

0 个答案:

没有答案