Skip to content

Commit cc3cd12

Browse files
committed
Tables: extract common ColumnAccessor code
1 parent 8288800 commit cc3cd12

1 file changed

Lines changed: 39 additions & 50 deletions

File tree

src/main/java/org/scijava/table/Tables.java

Lines changed: 39 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -82,44 +82,19 @@ public int size() {
8282
public Column<T> get(final int col) {
8383
if (col != 0) //
8484
throw new IllegalArgumentException("Column out of range: " + col);
85-
class ColumnAccessor implements ReadOnlyColumn<T> {
8685

87-
private final Object tableData = data;
88-
89-
@Override
90-
public String getHeader() {
91-
return colHeader;
92-
}
86+
return new ColumnAccessor<T>(data, colHeader) {
9387

9488
@Override
9589
public int size() {
9690
return data.size();
9791
}
9892

99-
@Override
100-
public Class<T> getType() {
101-
// TODO: Consider whether this is terrible.
102-
throw new UnsupportedOperationException();
103-
}
104-
10593
@Override
10694
public T get(final int index) {
10795
return data.get(index);
10896
}
109-
110-
@Override
111-
public int hashCode() {
112-
return getHeader().hashCode();
113-
}
114-
115-
@Override
116-
public boolean equals(final Object obj) {
117-
if (!(obj instanceof ColumnAccessor)) return false;
118-
final ColumnAccessor other = ((ColumnAccessor) obj);
119-
return data == other.tableData;
120-
}
121-
}
122-
return new ColumnAccessor();
97+
};
12398
}
12499
};
125100
}
@@ -163,9 +138,8 @@ public int size() {
163138

164139
@Override
165140
public Column<T> get(final int col) {
166-
class ColumnAccessor implements ReadOnlyColumn<T> {
141+
return new ColumnAccessor<T>(data, null) {
167142

168-
private final Object tableData = data;
169143
private boolean initialized;
170144
private String colHeader;
171145

@@ -189,31 +163,11 @@ public int size() {
189163
return data.size();
190164
}
191165

192-
@Override
193-
public Class<T> getType() {
194-
// TODO: Consider whether this is terrible.
195-
throw new UnsupportedOperationException();
196-
}
197-
198166
@Override
199167
public T get(final int index) {
200168
return data.get(index).get(getHeader());
201169
}
202-
203-
@Override
204-
public int hashCode() {
205-
return getHeader().hashCode();
206-
}
207-
208-
@Override
209-
public boolean equals(final Object obj) {
210-
if (!(obj instanceof ColumnAccessor)) return false;
211-
final ColumnAccessor other = ((ColumnAccessor) obj);
212-
if (data != other.tableData) return false;
213-
return Objects.equals(getHeader(), other.getHeader());
214-
}
215-
}
216-
return new ColumnAccessor();
170+
};
217171
}
218172
};
219173
}
@@ -429,4 +383,39 @@ default void setSize(int size) {
429383
throw readOnlyException();
430384
}
431385
}
386+
387+
private static abstract class ColumnAccessor<T> implements ReadOnlyColumn<T> {
388+
389+
private final Object data;
390+
private final String colHeader;
391+
392+
private ColumnAccessor(final Object data, final String colHeader) {
393+
this.data = data;
394+
this.colHeader = colHeader;
395+
}
396+
397+
@Override
398+
public String getHeader() {
399+
return colHeader;
400+
}
401+
402+
@Override
403+
public Class<T> getType() {
404+
// TODO: Consider whether this is terrible.
405+
throw new UnsupportedOperationException();
406+
}
407+
408+
@Override
409+
public int hashCode() {
410+
return getHeader().hashCode();
411+
}
412+
413+
@Override
414+
public boolean equals(final Object obj) {
415+
if (!(obj instanceof ColumnAccessor)) return false;
416+
final ColumnAccessor<?> other = ((ColumnAccessor<?>) obj);
417+
if (data != other.data) return false;
418+
return Objects.equals(getHeader(), other.getHeader());
419+
}
420+
}
432421
}

0 commit comments

Comments
 (0)