我想在java中实现一个通用的扩展方法,就像我在c#中一样。
以下是我的C#代码:
DataRecordExtensions.cs
public static class DataRecordExtensions
{
public static T Get<T>(this IDataRecord record, string fieldName, T defaultVal = default(T))
{
object o = record[fieldName];
if (o != null && !DBNull.Value.Equals(o))
{
try
{
return (T)Convert.ChangeType(o, typeof(T));
}
catch
{
}
}
return defaultVal;
}
}
以下是我如何使用DataRecordExtensions方法:
CountryRepository.cs
public class CountryRepository : ICountryRepository
{
// ... here are some code not relevant to understand my problem
public IEnumerable<Country> LoadCountries()
{
List<Country> countries = new List<Country>();
using (var sqlConnection = new SqlConnection(this.connectionString))
{
sqlConnection.Open();
string sqlTxt = "SELECT * FROM tab_Countries ORDER BY SortID";
using (SqlCommand readCmd = new SqlCommand(sqlTxt, sqlConnection))
{
SqlDataReader countriesReader = readCmd.ExecuteReader();
while (countriesReader.Read())
{
Country c = new Country();
c.CountryCode = countriesReader.Get<string>("CountryID");
c.Country = countriesReader.Get<string>("Country");
c.SortID = countriesReader.Get<int>("SortID");
countries.Add(c);
}
readCmd.Dispose();
countriesReader.Dispose();
};
sqlConnection.Close();
}
return countries;
}
}
如您所见,我使用 countriesReader.Get&lt; string&gt;(“CountryID”) 现在我想用Java这样的东西。我怎样才能在Java中使用这样的扩展方法,或者有其他选择吗?
答案 0 :(得分:1)
使用Java,您也可以调用这样的方法。
使用我想到的第一个例子,Pogostick29dev在我学习Java时观看的一段YouTube视频中的方法。
private FileConfiguration config = ....
public <T> T getFromConfig(String path) {
return (T) config.get(path);
}
可以像
一样调用它String bar = Foo.<String>getFromConfig(Some.File.Path);
要将其置于上下文中,这用于从配置文件中获取指定的部分。
应该注意的是,这是一个非常特定的Minecraft modding API,但是这个例子说明了如何轻松使用泛型。