匿名类可以声明自己的类型参数吗?
答案 0 :(得分:9)
你是对的,这是不可能的。由于匿名类只能使用一次,因此向它添加类型参数的重点是什么,你永远不能实际使用/继承它?您不能从定义它的任何其他代码位置实例化多次匿名类 ,并且您也不能将其子类化。
答案 1 :(得分:5)
没有。 Java语言规范详尽地定义了类实例创建表达式的可能参数,如下所示:
类实例创建表达式 指定要实例化的类, 可能后跟类型参数 (如果要实例化的类是 通用(§8.1.2)),后跟(a 可能是空的)实际值列表 构造函数的参数。它是 也可以传递显式类型 构造函数本身的参数 (如果它是一个通用的构造函数 (§8.8.4))。的类型参数 建设者马上跟着 关键字new。这是一个编译时 如果任何类型参数出错 用于类实例创建 表达式是通配符类型参数 (§4.5.1)。类实例创建 表达式有两种形式:
不合格的类实例创建 表达式以关键字开头 新。一个不合格的类实例 创建表达式可用于 创建一个类的实例, 无论班级是否是一个 顶级(§7.6),成员(§8.5,§9.5), 本地(§14.3)或匿名类 (§15.9.5)。
合格的类实例创建 表达式以Primary开头。一个 限定类实例创建 表达式可以创建 内部成员类和实例 他们的匿名子类。
因此,虽然您可以指定超类或接口或构造函数的实际类型参数,但您无法定义新的参数。虽然我认为这在某些极少数情况下可能有用(因为可以在类主体中使用新的类型参数),但有一个简单的解决方法:
答案 2 :(得分:2)
没有。
答案 3 :(得分:2)
但是,有一种方法可以使用参数。
匿名类中的任何声明方法都可以使用
以下代码演示了
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;
}
};
}
}
我希望这个例子会有所帮助。