2013-10-25 4 views
0

У меня есть arraylist и метод добавления объекта в arraylist. В настоящее время im использует перегруженные методы для различения различных объектов. Есть ли способ использовать неопределенный объект в качестве параметра для метода и дифференцировать внутри метода какой именно объект?Java Undefined Object

+2

показать код. – kosa

+0

код? может использовать var args и применить проверку 'instanceof' – Nishant

+0

. Я полагаю, что вы подразумеваете под неопределенным объектом объекты неизвестного типа ... не так ли? – Renjith

ответ

2

«Неопределенный объект как параметр», я предполагаю, что вы хотите написать функцию, которая не указывает тип объекта в объявлении функции, позволяя вам иметь только одну функцию.

Это можно сделать с помощью дженериков.

Вместо:

static void func(String str) 
{ 
    System.out.println("The string is: "+str); 
} 
static void func(Integer integer) 
{ 
    System.out.println("The integer is: "+integer); 
} 

вы можете иметь:

static <T> void func(T value) 
{ 
    if (value instanceof Integer) 
    System.out.println("The integer is: "+value); 
    else if (value instanceof String) 
    System.out.println("The string is: "+value); 
    else 
    System.out.println("Type not supported!! - "+value.getClass()); 
} 

Тест:

func("abc"); // The string is: abc 
func(3);  // The integer is: 3 
func(3.0); // Type not supported!! - class java.lang.Double 

См Java generics для получения дополнительной информации.

+0

+1 для предложения дженериков – Buddha

1

От «неопределенного объекта» Предполагаю, вы имеете в виду null. Вы можете бросить null к определенному типу объекта, и компилятор будет знать, какой перегруженный метод связываться с вызовом:

public void method(String s) { . . . } 
public void method(Integer s) { . . . } 
public void caller() { 
    method((String) null); 
    method((Integer) null); 
} 

Если у вас есть объект неопределенного типа, вы можете использовать instanceof оператора, чтобы проверить, что ввести его is, или getClass(), чтобы получить сам объект класса. Если у вас есть значение неизвестного типа , вы не можете сделать ничего, кроме переопределения вашей сигнатуры метода, чтобы принять дополнительный аргумент типа Class.

Однако, если комментарий Dukeling является точным и «неопределенным объектом» означает «объект неизвестного типа», вы должны изучить использование дженериков Java. Generics позволяет писать один метод, который работает с целым рядом типов объектов.

public <T> void method(T arg) { . . . } 
public void caller() { 
    method("String"); // String arg 
    method(0);  // Integer arg 
} 

Начните с Java generics tutorial для получения дополнительной информации.

+0

Я думаю, что OP ищет шаблонные методы ... – Dukeling

2

Один из способов, которым вы можете это сделать, - передать два параметра. Первый параметр - это объект, который необходимо передать, а второй параметр - индикатор того, какой тип объекта вы передаете.

public void TestFunc(Object obj1, String type){} 

Конечно, могут быть лучшие способы, чем использование String, мы можем использовать Enums и другой механизм. Вы также можете использовать InstanceOf для дифференциации, если вы не хотите передавать дополнительный параметр.