【问题标题】:How to import in Java with two classes with the same name [duplicate]如何在Java中导入具有相同名称的两个类[重复]
【发布时间】:2015-11-06 13:07:24
【问题描述】:

现在我遇到了一些问题。我正在编写一个转换器函数,假设我想将一种类型的卡(一个类)转换为另一种类型(另一个类)。

假设一个是 foo.bar.Card,另一个是 baz.banan.Card。我可以拥有一个

import foo.bar.Card;

但我做不到

import foo.bar.Card;
import baz.banan.Card;

因为编译器无法区分它们。

我可以只做其中一个,然后在另一个前面加上前缀,这样我的代码中有 Card 和 baz.banan.Card,但我想避免名字太长。理想情况下,我想使用 bar.Card 和 banan.Card,但这可能吗?如果可以,怎么做?

【问题讨论】:

  • 我能想到的唯一方法是将其中一个包装到一个名为不同的虚拟类中!
  • 我认为那是没有办法的。 :(
  • this answer 中所述,如果您不需要访问static 变量和函数,您可以扩展其中之一。

标签: java


【解决方案1】:

你有两个选择:

  1. 将您的类重命名为唯一名称
  2. 使用完全限定名引用您的类名:

    foo.bar.Card card = new foo.bar.Card();
    baz.banan.Card otherCard = new baz.banan.Card();
    

正如whalberg 所建议的,另一种选择是创建一个具有不同名称的包装类。

【讨论】:

  • 他明确表示他不想给对象添加前缀以避免名字很长
  • 1.在我的情况下不是一个选择。 2. 那是我不想做的。
  • 那么没有办法将这些类分开。编译器如何知道当您编写 Card 时,您的意思是包 X,如果您不提供完全限定名称,则在另一种情况下是包 Y?有时您想避免某些事情,但如果设计不允许,您的选择就会受到限制。
  • 第三种选择是将其中一个类包装在一个委托给包装类的新类中。
【解决方案2】:

不幸的是,他们并不能真正做到这一点。

我确实知道两个有用的解决方法:

最后一节课

使用与调用Card 对象方法完全相同的方法为Card 类之一创建一个包装类。不幸的是,这不是一个非常优雅的方法。

可变类

创建一个扩展CardCardA 类,并将CardA 用作您的Card 类。

很遗憾,您只有两个选择。如果这些不起作用,您将不得不使用完全限定名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 2018-08-14
    相关资源
    最近更新 更多