如何传递像String,Date这样的数据类型

时间:2010-08-19 20:31:11

标签: java types

假设我有一个方法声明,如:

private void someMethod(final String someKey, final Object dataType){
  // Some code
}

我想称之为:

someMethod("SomeKey", String);
someMethod("SomeKey", Date);

我可以用不同的方式做到这一点,比如使用表示类型,枚举等的不同值声明一个int。

但我可以直接传递这个类型吗?

修改

详细说明,我可以这样做:

someMethod("SomeKey", 1); // 1 = String
someMethod("SomeKey", 2); // 2 = Date

这看起来不太好。

3 个答案:

答案 0 :(得分:4)

如果您希望将对象类型作为参数传递,可以通过传递java.lang.Class

来完成

public void someMethod( String someKey, Class clazz ) {
    ... whatever
}

这就是你要找的东西吗?

编辑:纳入马克的评论。

您可以将其称为

someMethod( "keyA", Date.class );
someMethod( "keyB", String.class );

答案 1 :(得分:0)

您可以使用 instanceof 运算符: 例如:

private void someMethod(String someKey, Object dataType) {
    if (dataType instanceof String) {
        System.out.println("Called with a String");
    }
    else if (dataType instanceof Date) {
        System.out.println("Called with a Date");
    }
}

但是这样的风格很糟糕,因为你没有类型savety,最好是重载方法:

private void someMethod(String someKey, String dataType) {
    System.ount.println("Called with a String");
}

private void someMethod(String someKey, Date dataType) {
    System.ount.println("Called with a Date");
}

答案 2 :(得分:0)

您可以通过在类名称上“调用”.class来获取类型,它将返回表示类型的Class实例

private void someMethod(final String someKey, final Class<?> dataType){
// Some code
}

someMethod("SomeKey", String.class);
someMethod("SomeKey", Date.class);