我的计算机上有一个模拟互联网服务器的程序,虚假服务器需要能够向某些类发送多种数据类型。例如,在程序的某一点,服务器需要将int发送到类,然后将该int转换为字符串并将其发送给另一个字符串。
基本上我要问的是一个方法是否可以为输入提供多种数据类型(这是否有意义?如果没有生病,请尝试更好地解释)。如果没有创建许多不同的方法,有没有办法做到这一点?
编辑:还有一种方法可以区分传入的类型(防止错误)
答案 0 :(得分:3)
您可以使用任何类型的Object
方法。在Java 5.0及更高版本中,原语将被自动装箱并作为对象传递。
void method(Object o);
可以使用调用
method(1);
method("hello world");
method(new MyClass());
method(null);
答案 1 :(得分:2)
如果我理解正确,你会问一个方法foo()
是否可以为其参数提供多个不同的输入
这种方式foo(Integer i)
和foo(String s)
包含在同一方法中。
答案:是的,但不是很好
foo(Object o)
是您的方法声明
现在你需要理清不同类型的可能性
if(o instanceof Integer){
stuff();
} else if (o instanceof String){
moreStuff();
}
只需将其他/ if语句链接到所需结果。
答案 2 :(得分:0)
您想要的是通用方法或类。 要检查对象的类型,您必须使用'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
...
答案 3 :(得分:0)
我也想知道并在下面写下了块。我认为instanceof更好,但我尝试了getclass。
public static void main(String [] 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;
}
答案 4 :(得分:0)
您可以使用“散列适配器”模式。
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);
}
我总是喜欢这个,而不是'ifs和其他人的'级联。
在我的iPad上,对于格式化,简洁和拼写感到遗憾。