Pét*_*rök 9

你是对的,这是不可能的.由于匿名类只能使用一次,因此向它添加类型参数的重点是什么,你永远不能实际使用/继承它?您不能从定义匿名类的任何其他代码位置多次实例化匿名类,也不能将其子类化.

  • @meriton:匿名类的类实例创建表达式是什么?你怎么第二次执行它?一个例子很好. (2认同)

mer*_*ike 5

不可以.Java语言规范详尽地定义了类实例创建表达式的可能参数,如下所示:

类实例创建表达式指定要实例化的类,可能后跟类型参数(如果实例化的类是通用的(第8.1.2节)),后跟(可能为空)构造函数的实际值参数列表.也可以将显式类型参数传递给构造函数本身(如果它是泛型构造函数(第8.8.4节)).构造函数的类型参数紧跟在关键字new之后.如果类实例创建表达式中使用的任何类型参数是通配符类型参数(第4.5.1节),则为编译时错误.类实例创建表达式有两种形式:

  • 非限定类实例创建表达式以关键字new开头.无限制的类实例创建表达式可用于创建类的实例,无论该类是顶级(第7.6节),成员(第8.5节,第9.5节),本地(第14.3节)还是匿名类( §15.9.5).

  • 合格的类实例创建表达式以Primary开头.限定类实例创建表达式允许创建内部成员类及其匿名子类的实例.

因此,虽然您可以指定超类或接口或构造函数的实际类型参数,但您无法定义新的参数.虽然我承认这在某些极少数情况下可能很有用(因为可以在类主体中使用新的类型参数),但有一个简单的解决方法:

  • 将类实例创建表达式包装在泛型方法中(匿名类将看到封闭方法的类型参数)
  • 使用命名类