我有一个界面:
public interface Handler {
public <T> boolean shouldProcess(final T obj);
和实现:
public class SampleHandler implements Handler {
@Override
public <Long> boolean shouldProcess(final Long date) {
return <some comparison>;
}
我得到“类型参数Long隐藏类型Long”。 我得到这个的原因是什么?
答案 0 :(得分:6)
因为您没有使用具体类型T
实例化Long
;您实际上是在声明一个名为Long
的新类型变量,它与常规Longs的名称相同,因此将其隐藏起来。我怀疑你是说:
public interface Handler<T> {
public boolean shouldProcess(final T obj);
}
public class SimpleHandler implements Handler<Long> {
@Override
public boolean shouldProcess(final Long date) {
...
}
}
答案 1 :(得分:2)
<Long>
是一个通用类型参数,它恰好与java.lang.Long
类具有相同的名称。因此,它隐藏了该类,因此您方法的(final Long date)
参数是通用类型,而不是java.lang.Long
类型。
如果您希望SampleHandler
使用Handler
作为通用类型参数来实现java.lang.Long
,建议您将类型参数移至接口/类级别:
public interface Handler<T> {
public boolean shouldProcess(final T obj);
}
public class SampleHandler implements Handler<Long> {
@Override
public boolean shouldProcess(final Long date) {
return <some comparison>;
}
}
答案 2 :(得分:1)
Long
或java.lang.Long
是内置类。
尽量不要使用泛型,自定义类或与通用类同名的变量。
您更有可能希望拥有一个知道其类型的Handler,否则,它与使用Object
public interface Handler<T> {
public boolean shouldProcess(final T obj);
public class SampleHandler implements Handler<Long> {
@Override
public boolean shouldProcess(final Long date) {
return <some comparison>;
}