Это - хорошая практика для замены Класса Классом <? расширяет Объект> для предотвращения предупреждений?

У меня возникает множество вопросов, например:

  • Всегда ли путь к файлу всегда находится в конце строки?
  • Есть ли один путь к файлу на файл или это может быть что есть еще строки, содержащие путь?

Предполагая, что ответ на поставленные выше вопросы - да, пути к файлам можно проанализировать из файла, подобного этому:

foreach($item in $hans) {
    $mat = $item | Select-String -Pattern '.:\\.+'
    foreach($m in $mat) {
        $m.Matches.Value
    }
}

.:\\.+ является регулярным выражением, которое ищет последовательность буквы диска, двоеточия, обратной косой черты и захватывает все, что за ней, в одной строке.

Много раз требуется, чтобы скрипт синтаксического анализа, подобный этому, работал без ошибок. Регулярные выражения и Select-String - ваши друзья, но прежде чем вы их действительно узнаете, требуется некоторое время :-) Проверьте / напишите свой RegEx на https://regex101.com/ Я использую его большую часть времени. при написании регулярных выражений.

9
задан user46277 16 December 2008 в 06:52
поделиться

4 ответа

Это - корректная вещь сделать, только если действительно нет никакого общего базового класса, или соедините интерфейсом с этим, Объект класса должен представить.

Также Class<?> эффективно то же как Class<? extends Object>.

15
ответ дан 4 December 2019 в 07:15
поделиться

Да, это совершенно правильно.

Это - требование, чтобы Вы указали тип. И если Вы не можете, необходимо указать подстановочный знак.

Дальнейшее чтение: Спецификация языка Java: параметризованные типы

6
ответ дан 4 December 2019 в 07:15
поделиться

В зависимости от того, чего Вы хотите достигнуть, можно быть еще более точными:

public Class<MySpecialClass> mySpecialMethod() {
  return MySpecialClass.class;
}
6
ответ дан 4 December 2019 в 07:15
поделиться

Едва ли программист 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.

4
ответ дан 4 December 2019 в 07:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: