paulirwin opened a new issue, #1062:
URL: https://github.com/apache/lucenenet/issues/1062
### Is there an existing issue for this?
- [X] I have searched the existing issues
### Task description
From reviewing code as part of fixing #715. In Java 8+, you can pass a
lambda for an argument that is a "functional interface" type, which is an
interface with a single abstract method (SAM). This is roughly analogous to
delegates in .NET, although not as powerful as delegates. In Java, lambdas are
basically just a simpler way of implementing an anonymous class for a
functional interface. But since Lucene at the time targeted Java 7, they could
not take advantage of this feature like we can today.
Aside: Functional interfaces in modern Java _should_ have a
`@FunctionalInterface` annotation added, although this is not a requirement.
SAM is sufficient.
We should review to see if I've missed any below, and compare to the latest
Lucene code any interfaces or abstract classes that are still functional (have
not had other methods added) and consider converting those to delegate types
where it makes sense. They should still be named delegates, rather than i.e.
`Action<T>`, just without the `I` convention for interfaces. Then, we can
replace many "AnonymousClass" implementations in Lucene.NET with lambdas
instead.
As an example, this entire anonymous class could be replaced with `_ =>
true`:
```c#
private sealed class PredicateAnonymousClass : IPredicate<object[]>
{
public bool Apply(object[] args)
{
return true;
}
}
```
Candidates:
- `ITestPoint` ([SAM in latest
Lucene](https://github.com/apache/lucene/blob/deae39b01dec5d212b365afd220f6df000899bf3/lucene/test-framework/src/java/org/apache/lucene/tests/index/RandomIndexWriter.java#L601))
- `IReaderDisposedListener` ([`@FunctionalInterface` in latest
Lucene](https://github.com/apache/lucene/blob/deae39b01dec5d212b365afd220f6df000899bf3/lucene/core/src/java/org/apache/lucene/index/IndexReader.java#L141))
- `IAttributeReflector` (if generic overload is moved to an
extension/external method; [`@FunctionalInterface` in latest
Lucene](https://github.com/apache/lucene/blob/deae39b01dec5d212b365afd220f6df000899bf3/lucene/core/src/java/org/apache/lucene/util/AttributeReflector.java#L22))
- `TestRandomChains.IPredicate<T>` (could be replaced with .NET's built-in
`Predicate<T>` delegate, as this was [changed to use
`java.util.function.Predicate` in latest
Lucene](https://github.com/apache/lucene/blob/deae39b01dec5d212b365afd220f6df000899bf3/lucene/analysis.tests/src/test/org/apache/lucene/analysis/tests/TestRandomChains.java#L43))
- `IAutomatonProvider` ([SAM in latest
Lucene](https://github.com/apache/lucene/blob/deae39b01dec5d212b365afd220f6df000899bf3/lucene/core/src/java/org/apache/lucene/util/automaton/AutomatonProvider.java#L39))
- `IndexReaderWarmer` (abstract class in Lucene.NET; [`@FunctionalInterface`
in latest
Lucene](https://github.com/apache/lucene/blob/deae39b01dec5d212b365afd220f6df000899bf3/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java#L5717))
This will set us up for porting future `@FunctionalInterface`s in post-4.8
Lucene as delegates and lambdas instead of interfaces and anonymous classes.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]