我需要一个通用的静态方法来接受相同类型(类)的对象来反身比较它们。 (编译时检查)
例如,如果第一个参数是字符串;第二个也是字符串。
我认为下面会起作用;但没有。我可以将任何两个不同的对象传递到下面 :(。
public static <T> void compareAndSetNonEditableFields(T current, T old){}
即使是下面的也不起作用。请帮忙。
public static <T> void compareAndSetNonEditableFields(Class<T> type, T current, T old){}
UPDATE_1
团队感谢您的帮助,但下面给出了解决方案ClassName.<String>
是可选的,如果我使用它,那么只有我会知道我设置错了;但是大部分开发者都不知道这个用法(我现在也是新学的,谢谢);他们可以直接调用这个静态 API :(
UPDATE_2
即使我采用非静态方式;我无法阻止使用子类而不是父类(super class)。 如下图。没有编译问题。而且我不知道它是否有效。考虑到这一点,相对而言,我现在会关注@Ingo 的回答。
public class HandlingNonEditableFields<T> {
public void compareAndSetNonEditableFields(T currentObject, T oldObject) {
}
public static void main(String[] args) {
SuperClass obj1 = new SuperClass();
SubClass obj2 = new SubClass();
new HandlingNonEditableFields<SuperClass>().
compareAndSetNonEditableFields(obj1, obj2);
}
}
UPDATE_3
非静态方法方式:
我试图通过添加 Class<T>
来强制它作为我的论点之一。但即使这样也行不通。
public void compareAndSetNonEditableFields(Class<T> type2ForceT, T currentObject, T oldObject) { }
使用Class<? extends MainTestClass>
抛出异常在方法声明处。否则我必须在方法被调用者处显式转换。
结论
在编译时;无法强制将相同类级别的参数传递给声明为 Static 和 Non-Static 的泛型方法。
最佳答案
您需要按以下方式调用您的方法:
ClassName.<String>compareAndSetNonEditableFields("test", "test2"); // ok
ClassName.<String>compareAndSetNonEditableFields("test", 12); // compile time error
关于java - 强制使用多个相同类型的参数参数的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20263481/