У меня есть arraylist и метод добавления объекта в arraylist. В настоящее время im использует перегруженные методы для различения различных объектов. Есть ли способ использовать неопределенный объект в качестве параметра для метода и дифференцировать внутри метода какой именно объект?Java Undefined Object
ответ
«Неопределенный объект как параметр», я предполагаю, что вы хотите написать функцию, которая не указывает тип объекта в объявлении функции, позволяя вам иметь только одну функцию.
Это можно сделать с помощью дженериков.
Вместо:
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 для получения дополнительной информации.
+1 для предложения дженериков – Buddha
От «неопределенного объекта» Предполагаю, вы имеете в виду 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 для получения дополнительной информации.
Я думаю, что OP ищет шаблонные методы ... – Dukeling
Один из способов, которым вы можете это сделать, - передать два параметра. Первый параметр - это объект, который необходимо передать, а второй параметр - индикатор того, какой тип объекта вы передаете.
public void TestFunc(Object obj1, String type){}
Конечно, могут быть лучшие способы, чем использование String, мы можем использовать Enums и другой механизм. Вы также можете использовать InstanceOf для дифференциации, если вы не хотите передавать дополнительный параметр.
- 1. PHP Object undefined property
- 2. COM object method undefined
- 3. JSON Object Undefined (Nodejs)
- 4. Angular2 Object Undefined
- 5. Конструктор JSONArray (Object []) undefined
- 6. Javascript Array Object undefined
- 7. ajax respsonse undefined object
- 8. JS Date object undefined
- 9. undefined object in angularjs
- 10. Json fetched object undefined
- 11. $ .getJSON возвращает «undefined» или [object Object] [object Object]
- 12. Object [key] возвращает undefined (странно)
- 13. Google maps event.addListener object undefined
- 14. Переопределение `undefined` в` window` object
- 15. Loopback 3 app object undefined?
- 16. Javascript: firstChild object возвращает undefined
- 17. javascript object property logs undefined
- 18. undefined item in json object
- 19. undefined method `stringify_keys 'для Object
- 20. Метод Javascript Object Inopcessible/Undefined
- 21. Json array object undefined value
- 22. Array in Object возвращает undefined
- 23. jquery object - function undefined error
- 24. Android NDK Shared Object Undefined Reference Error
- 25. undefined method `root 'for main: Object
- 26. NoMethodError: undefined method `inside 'for main: Object
- 27. Undefined method 'execute' for main: Object
- 28. vee-validate error object - _vm.errors undefined
- 29. javascript - jquery Object Key Pair is undefined
- 30. Undefined is not object (оценка 'NativeModules.RNSearchBarManager.ComponentHeight')
показать код. – kosa
код? может использовать var args и применить проверку 'instanceof' – Nishant
. Я полагаю, что вы подразумеваете под неопределенным объектом объекты неизвестного типа ... не так ли? – Renjith