java类型参数推断_Java泛型类参数类型推断

鉴于界面:

public interface BasedOnOther> {

public T getOther();

public void staticStatisfied(final U list);

}

BasedOnOther< T,U extends BasedList< T>>在我的用例中看起来非常难看.这是因为T类型参数已经在基础列表< T>中定义.部分,所以“丑陋”来自T需要输入两次.

问题:是否可以让Java编译器从BasedList< T>中推断出通用T类型.在泛型类/接口定义中?

最终,我想使用如下界面:

class X implements BasedOnOther {

public SomeType getOther() { ... }

public void staticStatisfied(final Y list) { ... }

} // Does not compile, due to invalid parameter count.

其中Y扩展了BasedList< SomeType>.

代替:

class X implements BasedOnOther {

public SomeType getOther() { ... }

public void staticStatisfied(final Y list) { ... }

}

其中Y扩展了BasedList< SomeType>.

更新:ColinD建议

public interface BasedOnOther {

public T getOther();

public void staticSatisfied(BasedList list);

}

创建一个实现是不可能的,例如:

public class X implements BasedOnOther {

public SomeType getOther() { ... }

public void staticStatisfied(MemoryModel list);

} // Does not compile, as it does not implement the interface.

MemoryModel扩展了BasedList< SomeType>,这是必需的(因为它提供了其他方法).

解决方法:

看起来好像你实际上并不需要类型参数U extends BasedList< T>,如果你实际上不需要在类中做任何事情,需要一些特定的子类/基本列表< T>的实现.界面可能只是:

public interface BasedOnOther {

public T getOther();

public void staticSatisfied(BasedList list);

}

编辑:根据您的更新,我认为您无法做到这一点.我想你要么只需要使用原始声明,要么制作一些指定T的中间类型,例如:

public interface BasedOnSomeType>

extends BasedOnOther

{

}

public class X implements BasedOnSomeType { ... }

这看起来像是一种浪费,我并不认为原始声明看起来那么糟糕.

标签:java,type-inference,generics

来源: https://codeday.me/bug/20190621/1258165.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值