java 静态方法命名_Java / SpotBugs,什么是“命名静态内部类”,如果它在接口中声明?(Java/SpotBugs, What is a “named static inner cla...

Java / SpotBugs,什么是“命名静态内部类”,如果它在接口中声明?(Java/SpotBugs, What is a “named static inner class”, if it's being declared in an interface?)

我继承了一个使用MyBatis的代码库。 SpotBugs告诉我,SubjectRepositoryQueries could be refactored into a named _static_ inner class. 我从来没有遇到这个词,我希望有人可以解释它究竟是什么让我做得更好。 似乎SubjectRepositoryQueries实际上是命名的(它不是匿名的),它已经是静态的。 SubjectRepositoryQueries不能被声明为私有,因为它在接口内。

@Mapper

public interface SubjectRepositoryService {

@SelectProvider(type = SubjectRepositoryQueries.class, method = "search")

List search(SubjectSearch subjectSearch);

static final class SubjectRepositoryQueries {

public String search(final SubjectSearch subjectSearch) {

... some string generation

}

}

}

谢谢!

I inherited a codebase that uses MyBatis. SpotBugs is telling me that that SubjectRepositoryQueries could be refactored into a named _static_ inner class. I've never encountered this term, I was hoping someone could explain what exactly it's asking me to do better. It would seem that SubjectRepositoryQueries is in fact named (it's not anonymous), and it's already static. SubjectRepositoryQueries can't be declared private because it's inside an interface.

@Mapper

public interface SubjectRepositoryService {

@SelectProvider(type = SubjectRepositoryQueries.class, method = "search")

List search(SubjectSearch subjectSearch);

static final class SubjectRepositoryQueries {

public String search(final SubjectSearch subjectSearch) {

... some string generation

}

}

}

Thanks!

原文:https://stackoverflow.com/questions/49741087

更新时间:2019-09-19 13:17

最满意答案

目前还不清楚具体的警告意味着什么。 如果您的唯一目标是删除警告,那么假设您的内部类没有实现接口,您可以简单地将其转换为静态方法。

@Mapper

public interface SubjectRepositoryService {

//...

static String search(final SubjectSearch subjectSearch) {

//... some string generation

}

}

It's unclear what the specific warning means. If your only goal is to remove the warning then given that your inner class isn't implementing an interface, you can simply convert it to a static method.

@Mapper

public interface SubjectRepositoryService {

//...

static String search(final SubjectSearch subjectSearch) {

//... some string generation

}

}

2018-04-10

相关问答

我认为这是通过聚合推理的,也许他们也不值得创建一个顶级课程。 我有时候会这样做,如果有些东西需要创建一个包(将它们与其他人分开),但相应的类只能在顶级类的上下文中使用。 在我看来这是一个设计决定。 装饰者模式可能是一个很好的例子,他们可以应用在顶层的类,但也许是如此简单,他们不值得它也是顶级的。 您可以通过将它们用作内部类来轻松显示所有权。 乍看之下,这对于包装来说并不明显。 您直接看到依赖类/接口。 此外,可以访问类的私有字段,这可能是有用的,并且比私有包的范围更精细。 I think this

...

已经提出了一个正式的建议 ,允许在Java 7中的接口中使用静态方法。这个提议是在Project Coin下进行的 。 我个人的意见是,这是一个好主意。 实施没有技术上的困难,这是一个非常合乎逻辑的合理的事情。 项目硬币有几项建议,希望永远不会成为Java语言的一部分,但这是可以清理大量API的。 例如, Collections类具有用于操纵任何List实现的静态方法 ; 那些可以包括在List界面中。 更新:在Java Posse Podcast#234中, Joe D'arcy简要地提到了这个

...

您可以将包含非静态方法的外部类的对象传递到静态内部类中。 这可以通过构造函数或setter方法完成。 传入的对象应该分配给静态内部类的成员变量。 然后,您可以使用传递给静态内部类构造函数或setter的外部类的对象来调用非静态方法。 You could pass an object of the outer class, which contains the non-static method, into your static inner class. This could be done vi

...

我认为你需要在代码中添加一些设计以实现低耦合解决方案(ConnectionContext.INSTANCE.getConnector()。someMethod();绝对不是这样)。 我建议使用方法委托。 像这样的东西: public enum ConnectionContext {

INSTANCE;

private Connector connector;

public void setConnectionMode(Connector connector){

...

目前还不清楚具体的警告意味着什么。 如果您的唯一目标是删除警告,那么假设您的内部类没有实现接口,您可以简单地将其转换为静态方法。 @Mapper

public interface SubjectRepositoryService {

//...

static String search(final SubjectSearch subjectSearch) {

//... some string generation

}

}

It's unclear wh

...

当然,这是高度依赖于实现的,不建议用于生产代码,但对于一次性转换任务,它将适用于普通的Reflection操作和HotSpot / OpenJDK的当前实现: public class StaticArgumentsTest {

static Function staticConsumer(String testValue) {

return (st) -> testValue + " and " + st;

}

stat

...

内部接口类是隐式静态的,因此不需要引用外部类。 Inner classes of interfaces are implicitly static and as such, do not require reference to outer class.

您的假设是错误的 - 接口不是为了连接类似的属性,而是为了连接具有共同行为的类。 为了得到你正在寻找的东西,你可以使用'getter'方法 - 一种返回特定值的方法。 这样你强制实现类创建属性(或某种替代品)。 Your assumption is wrong - interfaces are not made to connect similar attributes, but to connect classes with common behavior. In order to get wh

...

我会使用另一个将Model类映射到SerializableObserver实现的类。 例如, DeserializerMap: public enum DeserializerMap {

INSTANCE;

private Map, SerializableObserver> modelObserverMap = new HashMap<>();

public void registerSerializableObserv

...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值