有没有办法制作一个可以在 Java 中使用 [] 的自定义类,类似于数组?
Posted
技术标签:
【中文标题】有没有办法制作一个可以在 Java 中使用 [] 的自定义类,类似于数组?【英文标题】:Is there a way to make a custom class that can have [] used on it in Java, similar to an array? 【发布时间】:2012-11-23 12:56:22 【问题描述】:对于 Java,有没有办法创建一个自定义类,可以像数组一样在其上使用 [] 访问器?
普通数组
int[] foo = int[5];
foo[4] = 5;
print(foo[4]);
//Output: "5"
自定义类
class Bar
//Custom class that uses index as a ref
Bar foo = new Bar(5);
foo.set(4, 5);
print(foo[4]);
//Output: "5"
【问题讨论】:
我希望...如果可以覆盖[]
,我们就不会被丑陋的list.get(5)
和str.charAt(6)
所困?..
不,我经常听到有关运算符重载将在 Java 的后续版本中出现的传言,但老实说,我认为不会。
作为旁注,看看 groovy :)
@JonTaylor 老实说,我认为 Java 已经错过了运算符重载的总线。
我的印象一直是Java故意不希望运算符重载成为可能......我认为这是有道理的。 (我听说它可能被用于集合类型,但没有别的,我可以接受。)
【参考方案1】:
不,您不能为 Java
中的类重载 []
运算符。但是你可以为你的数组创建 getter。
【讨论】:
【参考方案2】:不,Java 没有任何运算符重载。
【讨论】:
【参考方案3】:不,您必须实现 public <Type> get(int index) ...
方法,例如 ArrayList
所做的那样。
【讨论】:
【参考方案4】:不,要做到这一点,Java 必须添加 [
和 ]
的运算符重载 - 您需要改用等效的 get / set 方法。
据我所知,目前没有为任何未来版本的 Java 实现运算符重载的计划——它绝对不在 Java 8 的计划中,而且 Oracle 就 Java 9 及更高版本进行的讨论不包括它的计划任何一个。就我个人而言,我不喜欢它 - 它引入了许多复杂性,例如优先级和顺序,除非用户非常小心,否则可能会导致微妙、烦人的错误,并且(无论你是否同意这种立场)我相信这是首先决定将其从语言中排除的原因。
【讨论】:
通用运算符重载确实存在一些问题,但其中大多数源于这样一个事实,即thing1 + thing2
是否应该在thing1 或thing2 中定义并不清楚。相比之下,thing1[thing2]
应该在 thing1
中定义就更清楚了。【参考方案5】:
当然,
试试
Bar[] foo = new Bar[4];
foo[2] = new Bar();
System.out.print(foo[2]);
问候
【讨论】:
说真的,怎么了?我无法想象任何情况下 [] 的重载应该比Collection
的继承更受青睐。对于其他所有情况:创建一个 Bar
! 数组以上是关于有没有办法制作一个可以在 Java 中使用 [] 的自定义类,类似于数组?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在没有 WPF 或 Visual Studio 的情况下在 C# 中制作 GUI(仅使用代码)?
有没有办法在 iOS 中使用 react-native 来制作像 Android StaggeredGridView 这样的布局