我的计算机上有一个程序模拟互联网上的服务器,假服务器需要能够向某些类发送多个数据类型。例如,在程序的一个点上,服务器需要将一个int发送给一个类,然后将该int转换为一个字符串并将其发送给另一个。如何让方法具有不同的输入类型java
基本上我问的是,如果一个方法可以有多个数据类型的输入(这是否有意义?如果没有生病尝试解释更好)。有没有办法做到这一点,而不创建许多不同的方法?
编辑:也就是有没有办法告诉传入的类型之间的差异(以防止错误)
我的计算机上有一个程序模拟互联网上的服务器,假服务器需要能够向某些类发送多个数据类型。例如,在程序的一个点上,服务器需要将一个int发送给一个类,然后将该int转换为一个字符串并将其发送给另一个。如何让方法具有不同的输入类型java
基本上我问的是,如果一个方法可以有多个数据类型的输入(这是否有意义?如果没有生病尝试解释更好)。有没有办法做到这一点,而不创建许多不同的方法?
编辑:也就是有没有办法告诉传入的类型之间的差异(以防止错误)
如果我理解正确的叫,你问如果一个方法foo()
可以有多个不同的输入,其参数
这样foo(Integer i)
和foo(String s)
被包围以同样的方法。
答案:是的,但它不是漂亮
foo(Object o)
是您的方法声明
现在,你需要理清不同类型的可能性
if(o instanceof Integer){
stuff();
} else if (o instanceof String){
moreStuff();
}
刚刚链其他/ if语句为期望的结果。
你可以拥有这需要Object
这是任何类型的方法。在Java 5.0和更高版本中,原语将被自动装箱并作为对象传递。
void method(Object o);
可以使用
method(1);
method("hello world");
method(new MyClass());
method(null);
你想要的是通用方法或类。 检查的对象是你必须使用“的instanceof”方法
你可以让整个类通用或只是一个单一的方法,一个泛型类的例子是什么类型:
package javahowto;
public class Member<T> {
private T id;
public Member(T id) {
this.id = id;
}
public T getId() {
return id;
}
public void setId(T id) {
this.id = id;
}
public static void main(String[] args) {
Member<String> mString = new Member<String>("id1");
mString.setId("id2");
System.out.printf("id after setting id: %s%n", mString.getId());
//output: id after setting id: id2
Member<Integer> mInteger = new Member<Integer>(1);
mInteger.setId(2);
System.out.printf("id after setting id: %d%n", mInteger.getId());
//output: id after setting id: 2
}
现在你现在要找什么,我相信你会找到你的问题的最佳解决方案。
退房: http://download.oracle.com/javase/tutorial/java/generics/index.html http://en.wikipedia.org/wiki/Generics_in_Java
...
嗯,我也想知道以下块写道。我认为instanceof更好,但我试过getclass。
公共静态无效的主要(字串[] args){
System.out.println(method("This is a test"));
}
private static String method(Object o){
System.out.println(o.toString());
String status = "";
String className;
String[] oList = {"Double","Integer","String","Double","Float","Byte","Short","Long","Character","Boolean" };
for(int i = 0;i<oList.length;i++){
className = "java.lang." + oList[i];
Class testClass;
try {
testClass = Class.forName(className);
if(o.getClass().equals(testClass)){
status = "Your object is " + oList[i];
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return status;
}
您可以使用 “散列适配器” 的格局。
Public interface Adapter {
Public void handle(object o);
}
Public class StringAdapter implements Adapter {
Public void handle(String st) { // stuff ...
}
Public class IntegerAdapter implements Adapter {
Public void handle(Integer intgr) { // stuff ...
}
Private static final Map adapters = new HashMap();
Adapters.put(string.class, new stringAdapter());
Adapters.put(Integer.class, new IntegerAdapter());
Public void handleMe(Object o) {
Adapters.get(o.getClass()).handle(o);
}
我一直喜欢这个比ol级联的ifs和else's更多。
在我的iPad上对格式化和简洁以及拼写感到抱歉。
您能张贴一些示例代码吗? –