我有一个应该在int []和String []上工作的函数现在我用int参数和String参数做了相同的函数但是如果它必须这样做它的一点复制粘贴工作并且没有看起来非常有条理有没有办法解决这个问题并将这4个函数放在2?
static public void print(String s)
{
System.out.println(s);
}
static public void print(int s)
{
System.out.println(s);
}
static public void printArray(String[] s)
{
for (int i=0; i<s.length; i++)
print(s[i]);
}
static public void printArray(int[] s)
{
for (int i=0; i<s.length; i++)
print(s[i]);
}
由于 Matthy
答案 0 :(得分:10)
使用自动装箱/自动装箱,您可以执行以下操作:
public static void print(Object s) {
System.out.println(s.toString());
}
public static <T> void printArray(T[] arr) {
for (T t : arr) {
print(t);
}
}
一个缺点是printArray
的参数必须是引用类型的数组,但与varargs解决方案不同,这适用于任何引用类型。
编辑:关于varargs解决方案和@matthy关于将两种方法合二为一的问题(即通知它),你也可以这样做:
static public <T> void print(T... ts) {
for (T t : ts) {
System.out.print(t + " ");
}
System.out.println("");
}
但是,您仍然无法在基元数组上调用它:
int[] x = { 1, 2 };
print(x);
因为Java将T
作为int[]
并且将执行数组的toString
方法而不是遍历内容。如果你在Integer
或其他参考类型的数组上调用它,那么它也会起作用。
答案 1 :(得分:8)
static public void print(String...strings){
for(String str : strings){
System.out.println(str);
}
}
static public void print(int...ints){
for(int i : ints){
System.out.println(i);
}
}
答案 2 :(得分:0)
嗯,Basic类java.lang.Object匹配String以及int,byte,...(Autoboxing将它们转换为Integer,Byte等)。方法String.valueOf()
允许您创建这些字符串。 (toString()也可用)
答案 3 :(得分:0)
如果适用于您的代码,请使用泛型:
static <T> void printArray(T[] s)
{
for (int i=0; i<s.length; i++)
System.out.println(s[i]);
}
答案 4 :(得分:0)
结合以前的答案产生:
public class Test {
static <T> void print(T... ts) {
for (T t : ts)
System.out.println(t);
}
public static void main(String... args) {
String[] strArr = { "one", "two" };
Integer[] intArr = { 3, 4 };
String str = "five";
int i = 6;
print(strArr);
print(intArr);
print(str);
print(i);
}
}
<强>输出:强>
one
two
3
4
five
6
答案 5 :(得分:-2)
class MyClass {
public static void main(String[ ] args) {
String name ="David";
int age = 42;
double score =15.9;
char group = 'Z';
System.out.println(group + "\n" + name + " \n" + age + " \n" + score);
}
}