考虑以下病理示例:
class Ideone {
static class ArrayList<T> {
ArrayList() {
System.out.println("!!");
}
}
static class java {
static class util {
static class ArrayList<T> {
ArrayList() {
System.out.println("Here");
}
}
}
}
public static void main(String[] args) {
new ArrayList<>();
new java.util.ArrayList<>();
// Can I refer to the "usual" java.util.ArrayList?
}
}
在构造函数中创建的两个实例属于嵌套类。
但是,我怎么能指称java.util.ArrayList
我们在同一个班级中都知道和喜欢的东西呢?我们不能导入它,也不能使用完全限定的名称,因为将使用嵌套的类符号。
在这种情况下我们该怎么办?(除了显而易见的以外-停止对嵌套类使用此类肆意的邪恶名称)。
java.util.ArrayList
如果您完成了以下两项操作,则不能再直接引用:
ArrayList
在作用域中使用静态嵌套类隐藏简单名称。java.util.ArrayList
使用ArrayList
嵌套在class中util
,嵌套在嵌套class中的类来隐藏完全限定名称java
。您甚至无法“拆分”导入,以尝试使用“部分合格”的导入。
import java.*;
...
// This doesn't work!
new util.ArrayList<>();
您可以import java.*;
,但是那毫无价值。没有java
直接在包中定义任何类。
但是,您可以java.util.ArrayList
间接引用该类,因为它不是final
。在类范围之外Ideone
,声明一个具有不同名称的子类。
class AnArrayList<T> extends java.util.ArrayList<T> {}
然后,您可以将该类和程序引用到接口:
List<Integer> al = new AnArrayList<>(); // won't print !! or Here
我的Gradle项目中有两个依赖项库: OLD:完全使用lib 新:只有db库(固定库) 它们都拥有相同的数据库连接类,包括包,例如:net。我的公司。常见的dbsq。DBConnector()。 我需要的是确保使用新的db连接类,但由于所需的UTIL的其余部分在新的数据库中不可用,所以保留旧的(可以没有db类)作为依赖项。 是否有可能仅排除/包括依赖项的特定类或包?或者确保相同命名类的“重写”?
问题内容: 考虑以下jfiddle http://jsfiddle.net/bchapman26/9uUBU/29/ 我有2个模块(module1和module2)。module1和module2都定义了一个名为myService的服务。当两个模块都导入myApp时,这似乎在Angular中的myService上创建了名称冲突。看来AngularJs仅使用第二个服务定义,而没有警告您可能的问题。
问题内容: 我正在使用两个具有相同名称的python软件包。 http://www.alembic.io/updates.html https://pypi.python.org/pypi/alembic 是否有规范或Python方式处理名称冲突的两个软件包的安装?到目前为止,我在开发/构建过程中仅偶尔需要一个软件包,因此我一直在使用单独的virtualenv来处理冲突,但是这使构建步骤变得更加复
反射类和方法以及类加载器等都需要使用所谓的“二进制”类名。 类的完全限定名为。然而,要获得类对象,需要编写: 而不是 因为恰好是的内部类。
案例1。类扩展了java。util。阵列列表{ { } } 这里我得到一个compiletime错误,表示找不到符号 案例2。类扩展了java。util。阵列列表 { } 这个正在成功编译。 那么扩展ArrayList类有什么必要呢?如果我们不能利用它(如案例1)
问题内容: 在Java中,这些之间有什么区别: 我已经多次检查过Javadoc,但这从来不能很好地解释它。我也进行了测试,但没有反映出调用这些方法背后的任何实际含义。 问题答案: 如果不确定某件事,请尝试先编写测试。 我这样做: 印刷品: 最后一个块中有一个空条目,其中返回一个空字符串。 结果是: 该 名称 是您愿意使用动态加载与类,例如,调用的名称与默认。在一定范围内,所有类都有唯一的名称。 该