Может ли анонимный класс объявить собственные параметры типа?
В Java может анонимный класс объявить свои собственные параметры типа?
Ответ 1
Вы правы, это невозможно. Поскольку анонимный класс предназначен для использования только один раз, какой смысл добавлять к нему параметры типа, которые вы никогда не сможете использовать/наследовать? Вы не можете создавать анонимный класс более одного раза из любого другого кодового местоположения, чем тот, который его определяет, и вы также не можете подклассифицировать его.
Ответ 2
Нет. Спецификация языка Java исчерпывающе определяет возможные аргументы выражения для создания экземпляра класса следующим образом:
Выражение экземпляра экземпляра класса указывает экземпляр класса, возможно, за которым следуют аргументы типа (если экземпляр класса создается общий (§8.1.2)), за которым следует (a возможно пустой) список фактического значения аргументы конструктору. это также можно передать явный тип аргументы самому конструктору (если это общий конструктор (§8.8.4)). Аргументы типа для конструктор немедленно следует ключевое слово new. Это время компиляции если любой из аргументов типа используется при создании экземпляра класса выражение являются аргументами типа подстановочных знаков (§4.5.1). Создание экземпляра класса выражения имеют две формы:
Создание экземпляра неквалифицированного экземпляра выражения начинаются с ключевого слова новый. Экземпляр неквалифицированного класса выражение создания может быть использовано для создать экземпляр класса, независимо от того, является ли класс верхний уровень (§7.6), член (§8.5, §9.5), локальный (§14.3) или анонимный класс (§15.9.5).
Создание экземпляра определенного класса выражения начинаются с Первичного. создание экземпляра класса выражение позволяет создавать примеры внутренних классов членов и их анонимные подклассы.
Поэтому, когда вы можете указать фактические параметры типа суперкласса или интерфейса или конструктора, вы не можете определить новые. Хотя я утверждаю, что это может быть полезно в некоторых редких случаях (поскольку новый параметр типа может использоваться из тела класса), для этого есть простой способ:
- завершает выражение создания экземпляра класса в общем методе (анонимный класс увидит параметр типа входящего метода)
- использовать именованный класс
Ответ 3
Нет.
Ответ 4
Но есть способ использовать параметры.
Любой объявленный метод внутри анонимного класса может использовать
- свойства внешнего класса final
- параметры метода и конечный метод
- Переменные
следующий код демонстрирует это
public class Foo
{
private String value = "Hello ";
public void anonymousTest(final boolean asc)
{
final String world = "world";
new Comparable<String>()
{
@Override
public int compareTo(String o)
{
System.out.println( value + world);
int cmp = value.compareTo(o);
return asc ?cmp :0-cmp;
}
};
}
}
Надеюсь, что этот пример поможет.