Como passo uma classe como parâmetro em Java?

Existe alguma maneira de passar a classe como um parâmetro em Java e disparar alguns métodos dessa classe?

void main()
{
    callClass(that.class)
}

void callClass(???? classObject)
{
    classObject.somefunction
    // or 
    new classObject()
    //something like that ?
}

estou a usar o Google Web Toolkit e ele não suporta a reflexão.

Author: Michael Dorner, 2011-02-02

9 answers

public void foo(Class c){
        try {
            Object ob = c.newInstance();
        } catch (InstantiationException ex) {
            Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

como invocar o método usando a reflexão

 import java.lang.reflect.*;


   public class method2 {
      public int add(int a, int b)
      {
         return a + b;
      }

      public static void main(String args[])
      {
         try {
           Class cls = Class.forName("method2");
           Class partypes[] = new Class[2];
            partypes[0] = Integer.TYPE;
            partypes[1] = Integer.TYPE;
            Method meth = cls.getMethod(
              "add", partypes);
            method2 methobj = new method2();
            Object arglist[] = new Object[2];
            arglist[0] = new Integer(37);
            arglist[1] = new Integer(47);
            Object retobj 
              = meth.invoke(methobj, arglist);
            Integer retval = (Integer)retobj;
            System.out.println(retval.intValue());
         }
         catch (Throwable e) {
            System.err.println(e);
         }
      }
   }

Veja Também

 95
Author: Jigar Joshi, 2016-05-03 04:37:58
public void callingMethod(Class neededClass) {
    //Put your codes here
}

Para chamar o método, você chama-o assim:

callingMethod(ClassBeingCalled.class);
 33
Author: Olanrewaju O. Joseph, 2015-10-29 15:45:23

Utilizar

void callClass(Class classObject)
{
   //do something with class
}

A Class também é um objeto Java, então você pode se referir a ele usando seu tipo.

Leia mais sobre isso na documentação oficial.

 4
Author: darioo, 2011-02-02 10:04:46
Este tipo de coisas não é fácil. Aqui está um método que chama um método estático:
public static Object callStaticMethod(
    // class that contains the static method
    final Class<?> clazz,
    // method name
    final String methodName,
    // optional method parameters
    final Object... parameters) throws Exception{
    for(final Method method : clazz.getMethods()){
        if(method.getName().equals(methodName)){
            final Class<?>[] paramTypes = method.getParameterTypes();
            if(parameters.length != paramTypes.length){
                continue;
            }
            boolean compatible = true;
            for(int i = 0; i < paramTypes.length; i++){
                final Class<?> paramType = paramTypes[i];
                final Object param = parameters[i];
                if(param != null && !paramType.isInstance(param)){
                    compatible = false;
                    break;
                }

            }
            if(compatible){
                return method.invoke(/* static invocation */null,
                    parameters);
            }
        }
    }
    throw new NoSuchMethodException(methodName);
}

Actualização: Espera, acabei de ver a etiqueta gwt na pergunta. Você não pode usar o reflexo no GWT

 1
Author: Sean Patrick Floyd, 2011-02-02 10:15:19
Não tenho a certeza do que estás a tentar fazer, mas podes querer considerar que passar por uma aula pode não ser o que realmente precisas de fazer. Em muitos casos, lidar com classe como esta é facilmente encapsulado dentro de um padrão de fábrica de algum tipo e o uso disso é feito através de uma interface. aqui está um de dezenas de artigos sobre esse padrão: http://today.java.net/pub/a/today/2005/03/09/factory.html O uso de uma classe dentro de uma fábrica pode ser realizado em
 1
Author: Jorel, 2011-02-02 17:22:37
Como disse, o GWT não suporta a reflexão. Você deve usar a ligação diferida em vez de reflexão, ou biblioteca de terceiros como gwt-ent para suporte de reflexão na camada gwt.
 0
Author: Gursel Koca, 2011-02-02 12:50:16

Classe como paramater. Exemplo.

Três classes:

class TestCar {

    private int UnlockCode = 111;
    protected boolean hasAirCondition = true;
    String brand = "Ford";
    public String licensePlate = "Arizona 111";
}

--

class Terminal {

public void hackCar(TestCar car) {
     System.out.println(car.hasAirCondition);
     System.out.println(car.licensePlate);
     System.out.println(car.brand);
     }
}

--

class Story {

    public static void main(String args[]) {
        TestCar testCar = new TestCar();
        Terminal terminal = new Terminal();
        terminal.hackCar(testCar);
    }

}

No método de Terminal da classe hackCar (), tome a classe TestCar como parâmetro.

 0
Author: romangorbenko.com, 2018-07-01 15:18:49

Se estes: http://download.oracle.com/javase/tutorial/extra/generics/methods.html

Aqui está a explicação para os métodos do modelo.

 -1
Author: Harold SOTA, 2011-02-02 10:03:20
 -1
Author: Marcus Gründler, 2017-05-25 20:23:15