У меня возникает множество вопросов, например:
Предполагая, что ответ на поставленные выше вопросы - да, пути к файлам можно проанализировать из файла, подобного этому:
foreach($item in $hans) {
$mat = $item | Select-String -Pattern '.:\\.+'
foreach($m in $mat) {
$m.Matches.Value
}
}
.:\\.+
является регулярным выражением, которое ищет последовательность буквы диска, двоеточия, обратной косой черты и захватывает все, что за ней, в одной строке.
Много раз требуется, чтобы скрипт синтаксического анализа, подобный этому, работал без ошибок. Регулярные выражения и Select-String - ваши друзья, но прежде чем вы их действительно узнаете, требуется некоторое время :-) Проверьте / напишите свой RegEx на https://regex101.com/ Я использую его большую часть времени. при написании регулярных выражений.
Это - корректная вещь сделать, только если действительно нет никакого общего базового класса, или соедините интерфейсом с этим, Объект класса должен представить.
Также Class<?>
эффективно то же как Class<? extends Object>
.
Да, это совершенно правильно.
Это - требование, чтобы Вы указали тип. И если Вы не можете, необходимо указать подстановочный знак.
Дальнейшее чтение: Спецификация языка Java: параметризованные типы
В зависимости от того, чего Вы хотите достигнуть, можно быть еще более точными:
public Class<MySpecialClass> mySpecialMethod() {
return MySpecialClass.class;
}
Едва ли программист Java здесь, но прочитанный некоторые хорошие газеты о дженериках.
Да, необходимо добавить некоторый подстановочный знак или точный тип (Class<MySpecialClass>
) добавить безопасность. Причина состоит в том, что Класс является дженериком. Так, Class<Bar>
и Class<Foo>
то же после стирания их универсального параметра типа. Они все становятся Class
, так называемый необработанный тип. То стирание происходит при компиляции. Некоторый пример для иллюстрирования этого, где компилятор помогает Вам с автоматическим кастингом (обработка исключений, опущенная для краткости):
class Mine { }
class Vara {
public static void main(String... args) {
{ // works. translated to Mine m = (Mine) c.newInstance();
Class<Mine> c = Mine.class;
Mine m = c.newInstance();
}
{ // doesn't work. need a cast: Mine m = (Mine) c.newInstance();
Class c = Mine.class; // also Class<?> or Class<? extends Object>
Object o = c.newInstance(); // but this works. pointing to a Mine
Mine m = (Mine) c.newInstance(); // needs a manual cast
}
}
}
Высказывание Class<?>
(и эквивалент Class<? extends Object>
), Вы говорите компилятору о реальном желании Класса чей T
Объект и не сделал случайно использовал необработанный тип. Но это не добавит бросков удобства. Все, что делают дженерики, должно вставить автоматические броски для Вас, для кастинга от Object
к целевому типу. Дженерики являются тем же, рассуждает ли используемый с типом U или с типом T во времени выполнения для совместимости с более старыми версиями Java.