2015-02-22 3 views
-2

У меня есть Example1 и Example2 классы. Я добавил только одно поле в каждом классе:Список общего класса

public class Example1 { 
    private String test1; 
    //setter and getter 
} 

public class Example2 { 
    private String test2; 
    //setter and getter 
} 

Теперь мне нужно передать список из одного из этих двух классов в метод. На самом деле я хочу иметь метод, который может принимать список из обоих этих классов в качестве параметра. Я знаю общие классы, но я не знаю, как я могу использовать общие классы в этом случае. Может кто-нибудь мне помочь? Спасибо заранее.

UPDATE: Например предположим, у меня есть два метода, как это:

public void workingMethod1(List<Example1> list){ 
} 
public void workingMethod2(List<Example2> list){ 
} 

На самом деле, я хочу, чтобы объединить эти два метода и один метод.

+3

Вам нужно как классы для наследования от одного и того же класса. Или используйте «Список ', и в этом случае элементы в« List »будут обрабатываться как« Object ». –

+0

Я думаю, что второй способ лучше. Я попробую. Спасибо за Ваше внимание. – hamed

+0

Я согласен с списком использования hamed

ответ

-2

Я создал действительно базовый образец кода, основанный на предложении Бориса Паука выше. Это всего лишь скелетный код и не имеет функциональности. Он просто показывает идею общего в методе и двух классах.

package test; 

import java.util.ArrayList; 
import java.util.List; 


public class Test { 
    public class Example1 { 
    } 

    public class Example2 { 
    } 

    public static void workingMethod1(List<? extends Object> list){ 

    } 
    public static void workingMethod2(List<? extends Object> list){ 

    } 
    public static void main(String[] args) 
    { 
     Test t = new Test(); 
     Example1 eg1 = t.new Example1(); 
     Example2 eg2 = t.new Example2(); 
     List<Example1> list1 = new ArrayList<Example1>(); 
     List<Example1> list2 = new ArrayList<Example1>(); 

     workingMethod1(list1); 
     workingMethod2(list2); 
    } 
} 
+0

Хорошая идея. И поскольку оба метода также принимают 'Список ', 'Список ', 'Список ', ... вам не нужно заботиться о безопасности типов. – Tom

+0

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

+1

Я нахожусь здесь на стороне @tom, и я не знаю его какого-либо рекомендованного стандарта, так как лучше использовать подпись подписи функции (по крайней мере, некоторую), как следует использовать функцию, а не пытаться это и увидеть, какие ошибки вы получите позже. – will

0

Отказ от ответственности:

  1. Я пил, и таким образом это может быть изрешетит с опечатками.
  2. Я не сделал много java, и у меня его нет на моей текущей машине
  3. Я не обновлялся с изменениями с версии 1.6, поэтому может пропустить некоторые современные технологии.

Есть два способа, которыми я мог бы это сделать. Один из них будет иметь общий класс двух классов, на которые вы смотрите, а другой - перегрузить метод, который вы хотите иметь, чтобы иметь дело с обоими возможными списками.

Я также не понимаю, почему здесь нужны дженерики.

подход 1:

public class BaseClass{ 
    // whatever 
} 

public class Example1 extends BaseClass{ 
    // whatever 
} 

public class Example2 extends BaseClass { 
    // whatever 
} 


public void workingMethod(List<BaseClass> list){ 
    // whatever 
} 

Или, другой маршрут, если эти два класса не имеют много общего, было бы просто перегрузить workingMethod метод:

public class Example1{ 
    // whatever 
} 

public class Example2{ 
    // whatever 
} 

public void workingMethod(List<Example1> list){ 
    // do whatever to create the list needed to call the function you want 
    List<Double> someCrap = new List<Double>(); 
    for(Example1 e1 : list){ 
    someCrap.add(e1.getRandomCrap()); 
    } 
    commonWorkingMethod(someCrap); 
} 

public void workingMethod(List<Example2> list){ 
    // do whatever to create the list needed to call the function you want 
    List<Double> etc = new List<Double>(); 
    // do more crap 
    commonWorkingMethod(etc); 
} 

public void commonWorkingMethod(List<Double> list){ 
    // whatever 
} 
+0

Ваш второй подход не будет компилироваться, потому что обе реализации workMethod имеют одинаковое стирание. Кстати: «Я также не понимаю, почему здесь нужны дженерики». Ну, вы все еще используете их, поэтому они как-то необходимы: P. – Tom

+0

Huh. Я этого не знал. И я думал, что дженерики специально используют что-то вроде ' ', а не только с помощью иерархии классов. – will

+0

Это всего лишь разновидность общего ('' 'является подстановочным знаком). Так что все между '<' and '>' является «общим»: D. – Tom

Смежные вопросы