3 回答

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊
我認(rèn)為你不需要進(jìn)行反思。您只需要簡化您的需求并使用 java 和泛型的強(qiáng)大功能來滿足您的需求。這是根據(jù)您的第三次編輯的示例:
class MyClass<E> {
private Comparator<MyClass<E>> comparator;
public MyClass(List<Object> params, Comparator<MyClass<E>> comparator) {
//init
this.comparator = comparator;
}
}
class MyClassExtension extends MyClass<Integer> {
public MyClassExtension(List<Object> params, Comparator<MyClass<java.lang.Integer>> comparator) {
super(params, comparator);
}
}
class MyClassExtension2<E> extends MyClass<E> {
public MyClassExtension2(List<Object> params, Comparator<MyClass<E>> comparator) {
super(params, comparator);
}
}

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
我想我自己可能已經(jīng)意識(shí)到了一個(gè)潛在的解決方案,盡管我希望得到關(guān)于它的可行性的反饋。
public class MyClass<E>
{
public MyClass(Comparable<? super E> example, E example2, Object[] variables)
throws IllegalArgumentException
{
if(!example.getClass().equals(example2.getClass())
{
throw new IllegalArgumentException();
}
//init
}
public MyClass(Comparator<? super E> comp, Object[] variables)
{
//init
}
}
這個(gè)想法是 if 語句強(qiáng)制example成為與泛型 E 相同的類,并且example作為參數(shù)的存在強(qiáng)制該類實(shí)現(xiàn) Comparable。

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊
這可能有效,但我不建議這樣做。請注意,要使其正常工作,必須不是example所有成員variablesnull
public static <K extends Comparable<? super K>, T extends MyClass<K>>
T construct(T example, Object[] variables) throws
NoSuchMethodException,
SecurityException,
InstantiationException,
IllegalAccessException,
IllegalArgumentException,
InvocationTargetException
{
Objects.requireNotNull(example);
Class<?>[] argTypes = new Class<?>[variables.length];
for ( int i = 0; i < variables.length; ++i)
{
// This will NPE if variables[i] is null
argTypes[i] = variables[i].getClass();
}
// This will throw, if constructor is not defined
Constructor<?> constructor = example.getClass().getConstructor(argTypes);
return (T) constructor.newInstance(variables);
}
通常,您正在做的事情可以通過創(chuàng)建一個(gè)創(chuàng)建特定類實(shí)例的工廠接口來實(shí)現(xiàn)。
添加回答
舉報(bào)