class First {}
class Second extends First {}
class Jinkies {}
interface Greeting {}
class Hello implements Greeting {
private Map, List> scooby;
}
在scooby的声明中,Jinkies和List都有相同的类型参数 – 这就是我想要强制执行的.有没有办法在Java中实现这一点,而不必在Hello类的声明中列出两个参数(U和T)?
我想只有一个 – 例如就像是:
class Hello implements Greeting
但是,这不会编译.我要写:
new Hello()
代替:
new Hello()
即使我不关心Hello的身体中的任何地方(也不是Hello的用户).
编辑 – 正如@LouisWasserman在评论中解释的那样,我上面的一个不好的例子.也许澄清 – 让我说我一直想做:
new Hello()
但是然后能够使用任何U,其中U在整个Hello的主体中首先延伸(即上例中的第一个或第二个),而不需要照顾First,并确保U始终相同.也就是说,如果我有两种方法:
void method1(U a) {}
void method2(U b) {}
我希望能够强制第一种方法的U与第二种方法的U相同 – 但不关心它是什么(即第一种或第二种),只要它是相同的.
void method1(U a) {}
void method2(U b) {}
不会工作,因为我可以调用method1(第一个)和method2(第二个).
编辑 – 考虑到这一点,这可能不会以其他方式工作.即如果只指定一个边界,则可以采用另一种方式.因此,如果仅指定First,我可以“向下”到第三个.如果仅指定Second,我可以“upcast”为零.回到实验室……
最佳答案 这是相同的类定义,但现在可能使用不同的通用名称更加明显:
class Jinkies {}
interface Greeting {}
class Hello implements Greeting {
private Map, List> scooby;
}
正如您所看到的,如果没有在声明中指定T,例如新的Hello< Second,First>(),则无法说明T是什么.