Внутренний класс связан с экземпляром внешнего класса и есть два специальных вида: Локальный класс и Анонимный класс . Анонимный класс позволяет нам объявлять и создавать экземпляр класса одновременно, поэтому делает код кратким. Мы используем их, когда нам нужен локальный класс только один раз, поскольку у них нет имени.
Рассмотрим пример из doc , где мы имеем класс Person
:
public class Person {
public enum Sex {
MALE, FEMALE
}
String name;
LocalDate birthday;
Sex gender;
String emailAddress;
public int getAge() {
// ...
}
public void printPerson() {
// ...
}
}
, и у нас есть способ печати элементов, которые соответствуют критериям поиска:
public static void printPersons(
List roster, CheckPerson tester) {
for (Person p : roster) {
if (tester.test(p)) {
p.printPerson();
}
}
}
, где CheckPerson
- это интерфейс, такой как:
interface CheckPerson {
boolean test(Person p);
}
Теперь мы можем использовать анонимный класс, который реализует этот интерфейс, чтобы указать критерии поиска как:
printPersons(
roster,
new CheckPerson() {
public boolean test(Person p) {
return p.getGender() == Person.Sex.MALE
&& p.getAge() >= 18
&& p.getAge() <= 25;
}
}
);
. Здесь интерфейс очень прост, и синтаксис анонимного класса кажется громоздким и непонятным.
В Java 8 введен термин функциональный интерфейс , который является интерфейсом только с одним абстрактным методом, поэтому можно сказать, CheckPerson
является функциональным интерфейсом. Мы можем использовать выражение Lambda Expression , которое позволяет нам передать функцию как аргумент метода как:
printPersons(
roster,
(Person p) -> p.getGender() == Person.Sex.MALE
&& p.getAge() >= 18
&& p.getAge() <= 25
);
Вместо стандартного функционального интерфейса Predicate
мы можем использовать интерфейс CheckPerson
, что дополнительно уменьшит требуемый код.
XML Intellisense не будет автоматически работать на раздел пользовательской конфигурации.
Visual Studio может сообщить о предупреждениях относительно компиляции, жалуясь, что атрибуты раздела пользовательской конфигурации не определяются. Эти предупреждения могут быть проигнорированы.
, Если Вы хотите поддержку IntelliSense XML раздела пользовательской конфигурации (или если Вы просто хотите 'схему, не найденную' предупреждения исчезнуть), добавьте следующую строку к своему файлу DotNetConfig.xsd сразу после первого < xs:schema...> строка (который обычно является второй строкой в файле DotNetConfig.xsd).
<xs:include schemaLocation="YOUR_DIRECTORY\namespace.assemblyname.xsd"/>
файл DotNetConfig.xsd может быть найден в Вашем Visual Studio 8 (или 9) каталог установки в подкаталоге Xml\Schemas.
/
, не относителен. Моя функция только рассматривает пути, не URIs. – Bergi 15 May 2017 в 19:05