Java 参数正在隐藏类型
我有一个界面:Java 参数正在隐藏类型,java,generics,interface,Java,Generics,Interface,我有一个界面: 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>; } 我
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类型。
我得到这个的原因是什么?是一个泛型类型参数,它恰好与java.lang.Long类同名。因此,它隐藏了该类,因此方法的最后一个长日期参数是泛型类型,而不是java.lang.Long类型
如果希望SampleHandler使用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>;
}
}
是一个泛型类型参数,它恰好与java.lang.Long类同名。因此,它隐藏了该类,因此方法的最后一个长日期参数是泛型类型,而不是java.lang.Long类型
如果希望SampleHandler使用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>;
}
}
因为您没有用具体类型Long实例化T;实际上,您正在声明一个名为Long的新类型变量,该变量与常规Long具有相同的名称,因此会对它们进行阴影处理。我猜你的意思是:
public interface Handler<T> {
public boolean shouldProcess(final T obj);
}
public class SimpleHandler implements Handler<Long> {
@Override
public boolean shouldProcess(final Long date) {
...
}
}
因为您没有用具体类型Long实例化T;实际上,您正在声明一个名为Long的新类型变量,该变量与常规Long具有相同的名称,因此会对它们进行阴影处理。我猜你的意思是:
public interface Handler<T> {
public boolean shouldProcess(final T obj);
}
public class SimpleHandler implements Handler<Long> {
@Override
public boolean shouldProcess(final Long date) {
...
}
}
Long或java.lang.Long是一个内置类
尽量不要使用与普通类同名的泛型类型、自定义类或变量
您更可能希望有一个知道其类型的处理程序,否则,它与使用对象几乎相同
Long或java.lang.Long是一个内置类
尽量不要使用与普通类同名的泛型类型、自定义类或变量
您更可能希望有一个知道其类型的处理程序,否则,它与使用对象几乎相同