2016-01-24 8 views
1

У меня есть следующий класс:Pass Integer.class в качестве параметра

package query; 

public class Predicate<T> { 

    private String operand1; 
    private String operator; 
    private T operand2; 
    private Class<T> classType; 

    public Predicate(String operand1, T operand2, Class<T> classType){ 
     this(operand1, "=", operand2, classType); 
    } 

    public Predicate(String operand1, String operator, T operand2, Class<T> classType){ 
     this.operand1 = operand1; 
     this.operator = operator; 
     this.operand2 = operand2; 
     this.classType = classType; 
    } 

    public String getOperand1() { 
     return operand1; 
    } 

    public String getOperator() { 
     return operator; 
    } 

    public T getOperand2() { 
     return operand2; 
    } 

    public Class<T> getClassType() { 
     return classType; 
    } 

    @Override 
    public String toString() { 
     return operand1 + " " + operator + " ?"; 
    } 
} 

Следующая строка компилируется нормально:

Predicate<String> p1 = new Predicate<>("given_name", "=", "Kim", String.class); 

Однако следующий не будет:

Predicate<Integer> p1 = new Predicate<>("id", "=", "1", Integer.class); 

компилятор упоминает: не могу вывести аргументы типа для предиката <>

Что не так/как это можно решить?

+0

Немного любопытно: почему вы переходящая в классе явно вместо получить его из аргумента 'operand2'? –

+0

@ Mike'Pomax'Kamermans Я установил следующее свойство: 'private Class classType;' потому что мне это нужно позже. Я не уверен, как извлечь информацию из объекта. – Trace

+0

Не можете ли вы просто использовать 'operand2.getClass()'? (если это int, autoboxing даст вам Integer) –

ответ

7

"1" является строка и несовместимым с Integer.class

new Predicate<>("id", "=", 1, Integer.class) 

должно быть нормально

или

new Predicate<>("id", "=", "1", String.class) 
+0

Ouf, вот и все, конечно ... Примите через минуту. – Trace

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