Указатель непосредственно ссылается на местоположение памяти объекта. Java не имеет ничего подобного. Java имеет ссылки, которые ссылаются на местоположение объекта через хеш-таблицы. Вы не можете сделать что-то вроде арифметики указателей в Java с этими ссылками.
Чтобы ответить на ваш вопрос, это только ваши предпочтения. Я предпочитаю использовать синтаксис типа Java.
Для ясности я создал решение следующим образом
public static T GetDatabaseServiceFromConfig<T>(string databaseId)
{
object system = null;
switch (databaseId)
{
case DatabaseIds.<DbName>:
system = new <DbName>Service(new <DbName>ConfigSettings());
break;
// More cases
default:
// System not found
throw new ArgumentOutOfRangeException(databaseId);
}
if (!(system is T))
{
throw new NotImplementedException("Database type was found and created but does not implement interface: " + typeof(T));
}
// Safe cast
return (T)system;
}
Реализация:
var service = DatabaseServiceFactory.GetDatabaseServiceFromConfig<IProductService>(DatabaseIds.<DbName>);
// object now has access to functions on IProductService
service.CreateProduct(/*Params*/);