Приведение типов к переменным типа `Object` - PullRequest
0 голосов
/ 24 февраля 2011

Мне нужно вызвать функцию со следующей подписью.

createColumn (N name, V value, Serializer<N> nameSerializer, Serializer<V> valueSerializer)

Я хочу передать переменные типа Object, которым могли бы быть присвоены значения целого числа или строки, я хочу, чтобы приведение типов выполнялось автоматически ... в соответствии со значениями, которые я присвоил переменным типа объекта вместо явного преобразования как это: -

Object object1= "MY_AGE"; // строковое значение, присвоенное переменной типа объекта

Object object2= 31; // целочисленное значение, присвоенное переменной типа объекта

createColumn ((String)object1, (int)object2, ....); // Поскольку тип данных object1 & object2 не будет одинаковым каждый раз, когда я вызываю эту функцию в для цикла , я Я хочу, чтобы он автоматически разыгрывался в соответствии со значением, которое я ему присвоил. * Поэтому я ищу что-то вроде этого, если возможно: -

createColumn (object1, object2, ....);

Ответы [ 3 ]

0 голосов
/ 24 февраля 2011

Вы можете вызвать следующее, так как вы не хотите проверять во время компиляции, что типы совпадают,

createColumn(object1, object2, (Serializer)serializer1, (Serializer)serializer2);

РЕДАКТИРОВАТЬ: Это компилируется для меня (с предупреждением "Unchecked")

interface Serializer<T> { }
public static <N,V> void createColumn (N name, V value, Serializer<N> nameSerializer, Serializer<V> valueSerializer) {
}

public static void main(String[] args) throws  NoSuchFieldException {
    Object object1 = "hi";
    Object object2 = 31;
    Serializer<String> serializer1 = null;
    Serializer<Integer> serializer2 = null;
    createColumn(object1, object2, (Serializer) serializer1, (Serializer) serializer2);
}
0 голосов
/ 24 февраля 2011

Я не думаю, что это возможно, вы дали переменной тип объекта, и я не знаю, как определить, является ли она на самом деле int или строкой, если вы не используете некрасивую логику, чтобы увидеть, какие символызначение состоит из, но это не будет доказательством дурака, если только значение не всегда будет либо целым числом, либо строкой.

Вам нужно передавать целые числа или все можно просто передать в виде строки?*

0 голосов
/ 24 февраля 2011

Насколько я понимаю, ваш вопрос не о приведении (которое относится к типам, объявленным во время компиляции), а о преобразовании (которое касается объектов во время выполнения).

Попробуйте использовать метод String.valueOf() для аргументов Object. И для Integer, и для String будет получено представление String.

...