Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.141.8.247] |
|
Сообщ.
#1
,
|
|
|
можно ли в яве сделать шаблон метода?
Хочу сделать чтобы второй аргумент был шаблонным: public Boolean SetValue(eMemberName eMU, byte tValue) { ... } Если можно - подскажите как это делаеца? |
Сообщ.
#2
,
|
|
|
http://www.rsdn.ru/article/java/genericsinjava.xml
|
Сообщ.
#3
,
|
|
|
по моему можно ето зделать в 1.4
public interface IGeneric { //method declarations } public class Class1 implements IGeneric{} public class Class2 implements IGeneric{} ........ public class ClassN implements IGeneric{} public class Main { public void func(int i, IGeneric obj) { //........... } } и по моему так даже лучше |
Сообщ.
#4
,
|
|
|
Это не решает проблему при передаче аргументов простых типов. Придется заворачивать их в оболочки.
|
Сообщ.
#5
,
|
|
|
в 1.4 нет шаблонов, или я не встречал, но ето можно симулировать самому, в зависимости от задачи
|
Сообщ.
#6
,
|
|
|
я сделал так:
public <T> boolean SetValue(eMemberName eMU, T t) { ... Добавлено Lamer George, а шаблоны для простых типоф вообще не используюца как я понял... но в принципе для них уже есть оболочки - Integer, Boolean, Long и тд Добавлено ruli, бесспорно решение красивое, но для моей задачи это излишне грамоздко. |
Сообщ.
#7
,
|
|
|
а если писать под 1.4? ток через интерфайсы
может я чегот-о не понимаю но ето тож самое по моему, ток в твоём варианте меньше писать, exception у тя могу появиться, если типы не проверять public <T> boolean SetValue(eMemberName eMU, T t) === public class Class1 implements IGeneric{} public class Main { public void func(int i, IGeneric obj) { //........... } ----------------------------------------- |
Сообщ.
#8
,
|
|
|
ruli, если под 1.4 то да
Цитата ruli @ в твоём варианте меньше писать да, я не пишу уже написанные оболочки для базовых классов - Integer/... . Добавлено подскажите на счёт такой задачи... class Member<Type> { Type value; // <--- Member(String strMA, eMemberName eMn, Type tIn) { strMIBAdress = strMA; eMN = eMn; value = tIn; //value = (Type)0; } } Член value при создании = null. А как ему присвоить первоначальное значение (= 0), т.е. просто создать объект через значение для конструктора по умолчанию типа value = new Type(0); ? |
Сообщ.
#9
,
|
|
|
а если вот так?
class Member<Type> { Type value; // <--- здесь по моему нельзя инициализировать см п. 1 Member(String strMA, eMemberName eMn, Type tIn) { strMIBAdress = strMA; eMN = eMn; try{ value = (T)tIn.getClass().newInstance(); }catch(Exception e) {} //value = (Type)0; } } п.1 посколько Т ето динамический тип, и он не известен до момента создания обьекта member Добавлено можно и так... но не знаю что получается class Member<Type> { Type value; // <--- здесь по моем static { new Member(); } Member() { try{ value = (T)value.getClass().newInstance(); }catch(Exception e) {} } Member(String strMA, eMemberName eMn, Type tIn) { strMIBAdress = strMA; eMN = eMn; //value = (Type)0; } } |
Сообщ.
#10
,
|
|
|
эксепшн вылетает
|