java中如何求解方法的泛型输入参数
以下内容无法编译。 我怎样才能解决它? 我想要一个方法或一种方法,接受泛型类型作为方法的输入,并将其委托给具体方法,而不使用java中如何求解方法的泛型输入参数,java,generics,Java,Generics,以下内容无法编译。 我怎样才能解决它? 我想要一个方法或一种方法,接受泛型类型作为方法的输入,并将其委托给具体方法,而不使用instanceof或反射 public class MyCoolClass { void doSomthing(Double x) {} void doSomthing(Integer x) {} public <T extends Number> void setMe(T in) { doSomthing(in
instanceof
或反射
public class MyCoolClass {
void doSomthing(Double x) {}
void doSomthing(Integer x) {}
public <T extends Number> void setMe(T in) {
doSomthing(in);
}
}
公共类{
void doSomthing(双x){}
void doSomthing(整数x){}
公共无效设置时间(T英寸){
doSomthing(in);
}
}
我想要一个方法或一种方法,接受泛型类型作为方法的输入,并将其委托给具体方法,而不使用instanceof或reflection
public class MyCoolClass {
void doSomthing(Double x) {}
void doSomthing(Integer x) {}
public <T extends Number> void setMe(T in) {
doSomthing(in);
}
}
如果控制泛型类型,则反转控件并将行为移动到泛型类型的接口中:
public interface MyInterface {
void doSomething();
}
然后,您的
MyInterface
的特定实现将知道该做什么,从而避免实例和反射。您所要求的是不可能安全地执行的。。。你需要……的例子。。。然而,你需要问一下你在这里做的事情是否正确
public class MyCoolClass {
void doSomthing(Double x) {}
void doSomthing(Integer x) {}
public <T extends Number> void setMe(T in) {
doSomthing(in);
}
}
避免实例的唯一方法是已知类型和编译时间,在这种情况下,调用代码应该能够调用正确的具体doSomething
方法
否则,您的类或调用代码必须在某个地方执行该恼人的实例
非实例的替代方案会陷入使用java反射API的困境,这要糟糕得多。您的问题的答案似乎是:
java不是C++。使用方法重载
用这样的内容替换示例类:
public class MyActuallyFunctioningClass
{
public Integer blam(final Integer paramName) {}
public Double blam(final Double paramName) {}
}
使用Integer
参数时,将调用Integer
版本
当您使用Double
参数时,将调用Double
版本。为了编译,可以强制转换为Double
或Integer
:doSomthing((Double)in)
如果删除setMe
方法怎么办?@user7这是认真的回答吗?我不会创建这样的通用方法,因为您可能会收到类似BigDecimal x
的参数(因为BigDecimal
扩展自Number
),并且您没有合适的doSomthing
方法来支持它。只要将这些方法公开,让你的API客户端正确处理它。编译器不会接受它,因为他不知道你是否真的为扩展数字的每种类型(无限)提供了所有方法。你能给我一个例子吗?我不明白。接口不可用generic@user1409534Number
是您正在处理的实际接口吗?