Если Вы хотите не ввести имя класса дважды во время инстанцирования как в:
new SomeContainer<SomeType>(SomeType.class);
можно использовать метод фабрики:
<E> SomeContainer<E> createContainer(Class<E> class);
Как в:
public class Container<E> {
public static <E> Container<E> create(Class<E> c) {
return new Container<E>(c);
}
Class<E> c;
public Container(Class<E> c) {
super();
this.c = c;
}
public E createInstance()
throws InstantiationException,
IllegalAccessException {
return c.newInstance();
}
}
Прочтите это:
Это проект Github под названием «QuietLog», первоначально с нашего сайта CocoaHeads, который объясняет, как создать функцию QuietLog
, которая выполняет то, что вы описываете. Он также показывает, как обернуть QuietLog в макрос с именем LocationLog, чтобы он распечатал имя файла и номер строки, где у вас есть оператор журнала. Я использую его во всех своих проектах и больше не теряю случайных операторов "NSLog".
Мне нравится использовать объекты Objective-C для форматирования строк и аргументов, поэтому я переписал NSLog () и добавил его в свои утилиты.
+ (void)myLog:(NSString *)formatString, ...
{
va_list args;
va_start(args, formatString);
NSString* output = [[NSString alloc] initWithFormat:formatString arguments:args];
fprintf(stderr, "%s\n", [output UTF8String]);
[output release];
va_end(args);
}
Вы можете напечатать кому: sdterr:
fprintf(stderr, "%s", "Your message");
Edit: Посмотрите эту реализацию Карла Крафт