java 泛型属性_在java属性声明中强制使用泛型类型

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是什么.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值