我有两个名为Matchers
的类,我需要在第三个类中使用静态方法,因此其中一个只能通过静态导入使用。但是,我无法为静态导入的方法明确指定类型参数(即<Type> method()
)。
如何在不完全符合课程资格的情况下解决这个问题?
答案 0 :(得分:0)
你做不到。至少不是用Java(其他一些语言,比如Scala,让你给你导入的一个别名,这个很酷,可以在这种情况下使用)。
在这里,您只需要为两个类或一个类使用完全限定名称(并导入另一个类)。
在一个文件中使用两个具有相同名称的类不是最好的主意,除非你有一个非常好的用例。也许你只能使用其中一个Matchers来实际做你想做的事情吗?
我会在这里阅读一些内容,但我猜这是Hamcrest / Mockito Matchers的内容吗?如果是这样,那么在大多数情况下你应该只使用其中一个。如果你处于非常不幸的情况,你做需要两者,那么,你很不幸: - )
答案 1 :(得分:0)
提出一种非常黑客的方式,作为完全符合课程资格的替代方案:
简单地实现一个有问题的类的子类,并在子类上调用父类的静态方法。这是允许的,甚至不会生成编译器警告。由于该方法是静态的,因此不涉及虚拟方法。子类只是作为一个别名(所以最好把它变成私有和最终的东西)。
答案 2 :(得分:0)
有一种方式可能看起来有点不洁,但它已被标准所涵盖。您可以将局部变量滥用为导入。由于它们的值与static
方法调用无关,因此可以将它们初始化为null
public class Imports
{
static <T> java.util.List<T> emptyList()
{
System.out.println("Imports.emptyList()");
return java.util.Collections.emptyList();
}
public static void main(String[] args)
{
final java.util.Collections c=null;
final Imports i=null;
System.out.println(c.emptyList());
System.out.println(i.emptyList());
}
}
c.emptyList()
和i.emptyList()
在此处引用了不同的static
方法。你甚至可以插入类型参数,例如c.<String>emptyList()
。但是有些编译器可能会发出警告,你必须使用这个技巧关闭一个类。但在某些情况下,可能没有更好的方法(多次重复限定名称并不总是更好的方式)......