2009-11-30 3 views
-1

У меня есть быстрый вопрос о Generic Type. У меня есть интерфейс классаJava Generic Type question

public interface myInterface<T> { 
    T add(); 
} 

и вспомогательный класс

public class interfaceImp<T> implements myInterface 
{ 
    private T t1; 
    private T t2; 

    interfaceImp(T t1, T t2){ 
     this.t1 = t1; 
     this.t2 = t2; 

    } 

    public Object add() { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 

Однако, я не имею ни малейшего представления о том, как реализовать надстройку(). Должен ли я проверить следующее

1. t1.getClass() == Integer.class&&t2.getClass() == Integer.class</br> 
2. t1.getClass() != Integer.class&&t2.getClass() == Integer.class</br> 
3. t1.getClass() == Integer.class&&t2.getClass() != Integer.class</br> 

ф Тогда случай t1 или t2 к соответствующему типу? Или есть лучший способ сделать это? спасибо !!

+0

Что должен сделать ваш метод add()? –

+1

Я бы сделал шаг назад и разработал функциональное требование, для которого вы думаете, что это «решение». – BalusC

+1

Это, по-видимому, вопрос домашних заданий о дженериках, «решение» - это то, как они работают. – Chris

ответ

1

Извините, что так критично, но почти невозможно понять, что вы пытаетесь сделать здесь. Но для начала,

public interface MyInterface<T> 
    T add(); 
} 

public class InterfaceImp implements MyInterface<Date> { // Or whatever class you want 
    private Date t1; 
    private Date t2; 

    interfaceImp(Date t1, Date t2){ 
    this.t1 = t1; 
    this.t2 = t2; 
    } 

    public Date add() { 
    throw new UnsupportedOperationException("Not supported yet."); 
    } 
} 
+0

похоже, что вы обновили свой вопрос. Нам все равно нужно знать, что вы хотите делать с add(). – Mike

+0

Что я делаю, это попытка узнать некоторые методы дженериков, написав приложение Calculator, поэтому add() добавляет два числа вместе. Калькулятор будет иметь некоторые основные функции, такие как +, -, *, /. Также калькулятор может выполнять некоторые выборочные криптографические вычисления, такие как GCD двух целых чисел. Возможно, приложение «Калькулятор» не является хорошим примером для изучения дженериков, поскольку основные операции (+, -, *, /) можно легко переносить без использования дженериков. – user200340

1

Я думаю, что в первую очередь вам нужно выяснить, что делает ваш метод добавления.

Было сказано, что произойдет, если пройдены две строки? Что делать, если String и Integer переданы?
Поскольку по контракту вы возвращаете T, какой Т вы вернете, если пройдут два «незаслуженных» объекта?

Вы пытаетесь узнать, являются ли t1 и t2 целыми, но если они всегда являются Целочисленными, то почему нужны дженерики?

Btw, чтобы знать, если, например, t1 является Integer или нет, я бы сделал:

if(t1 instanceof Integer){ 
    //do something 
} 

Просто маленький кусочек совет: старайтесь не использовать имена классов, которые начинаются с более низким буква.

+0

Спасибо за это «Просто небольшой совет: постарайтесь не использовать имена классов, начинающиеся с буквы в нижнем регистре». – user200340

0

Это не то, как обычно используются дженерики. Вы не можете проверить, является ли T целым, это не то, что говорит класс. То, что он в настоящее время говорит, что она может быть определена любым типом класса, а затем добавить эти два вместе, если он работал только с Интс было бы

interfaceImp(Integer t1, Integer t2) 

, который, очевидно, бессмысленно, поскольку Целые может быть легко добавлено.

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

Что делает ваш класс, но в форме методы (чтобы вы сделать некоторую работу для домашних заданий ответа это)

public <? implements myInterface> addTheseItems (<? implements myInterface> first, 
               <? implements myInterface> second) { 
     return first.add(second); 
} 

Вы должны сообщить компилятору, что поставляемые типы реализуют интерфейс или вы выиграли У вас нет доступа к методу добавления, который вам нужен.