使用我实际上不使用的静态方法扩展类时,是否会编译这些方法?

时间:2015-04-25 15:38:32

标签: java

我正在扩展一个类,它有很多library(reshape2) library(ggplot2) library(scales) library(gridExtra) library(ggdendro) library(zoo) library(plyr) #data process mm8<-read.csv("mm8.csv",header=TRUE) rownames(mm8)<-mm8$X mm8<-mm8[,-2] mm8[1:4,2:5] #cluster from http://stackoverflow.com/questions/21474388/colorize-clusters-in-dendogram-with-ggplot2 df<-t(mm8) df<-df[-1,] cut <- 4 # Number of clusters hc <- hclust(dist(df), "ave") # heirarchal clustering dendr <- dendro_data(hc, type = "rectangle") clust <- cutree(hc, k = cut) # find 'cut' clusters clust.df <- data.frame(label = names(clust), cluster = clust) # Split dendrogram into upper grey section and lower coloured section height <- unique(dendr$segments$y)[order(unique(dendr$segments$y), decreasing = TRUE)] cut.height <- mean(c(height[cut], height[cut-1])) dendr$segments$line <- ifelse(dendr$segments$y == dendr$segments$yend & dendr$segments$y > cut.height, 1, 2) dendr$segments$line <- ifelse(dendr$segments$yend > cut.height, 1, dendr$segments$line) # Number the clusters dendr$segments$cluster <- c(-1, diff(dendr$segments$line)) change <- which(dendr$segments$cluster == 1) for (i in 1:cut) dendr$segments$cluster[change[i]] = i + 1 dendr$segments$cluster <- ifelse(dendr$segments$line == 1, 1, ifelse(dendr$segments$cluster == 0, NA, dendr$segments$cluster)) dendr$segments$cluster <- na.locf(dendr$segments$cluster) # Consistent numbering between segment$cluster and label$cluster clust.df$label <- factor(clust.df$label, levels = levels(dendr$labels$label)) clust.df <- arrange(clust.df, label) clust.df$cluster <- factor((clust.df$cluster), levels = unique(clust.df$cluster), labels = (1:cut) + 1) dendr[["labels"]] <- merge(dendr[["labels"]], clust.df, by = "label") # Positions for cluster labels n.rle <- rle(dendr$segments$cluster) N <- cumsum(n.rle$lengths) N <- N[seq(1, length(N), 2)] + 1 N.df <- dendr$segments[N, ] N.df$cluster <- N.df$cluster - 1 # Plot the dendrogram # Plot the dendrogram p3<-ggplot() + geom_segment(data = segment(dendr), aes(x=x, y=y, xend=xend, yend=yend, size=factor(line), colour=factor(cluster)), lineend = "square", show_guide = FALSE) + scale_colour_manual(values = c("grey60", rainbow(cut))) + scale_size_manual(values = c(.1, 1)) + labs(x = NULL, y = NULL) + theme(axis.line.y = element_blank(), axis.ticks.y = element_blank(), axis.text.y = element_blank(), axis.title.y = element_blank(), panel.background = element_blank(), panel.grid = element_blank()) + guides(fill = FALSE)+ theme(axis.ticks.x = element_blank(), axis.text.x = element_blank(), axis.title.x = element_blank(), plot.background = element_blank()) #priparing a bar??? p4<-ggplot(clust.df,aes(x=label,y=1,fill=cluster))+geom_raster()+ theme(axis.line.y = element_blank(), axis.ticks.y = element_blank(), axis.text.y = element_blank(), axis.title.y = element_blank(), panel.background = element_blank(), panel.grid = element_blank()) + guides(fill = FALSE)+ theme(axis.ticks.x = element_blank(), axis.text.x = element_blank(), axis.title.x = element_blank(), plot.background = element_blank()) #data for ggplot2 geom_raster data.m = melt(mm8) colnames(data.m)<-c("Var1", "Var2", "value") head(data.m) #plotting p1 <- ggplot(data.m, aes(Var2, Var1)) + geom_raster(aes(fill = value),colour ="white") p1<-p1 + theme(axis.ticks = element_blank(), axis.text = element_blank(),axis.title=element_blank(),plot.background = element_blank()) p2<-ggplot(data.m,aes(Var1,value*(-1)))+geom_bar(data.m, aes(fill=Var2),position="stack",stat="identity")+coord_flip() p2<-ggplot(data.m,aes(Var1,value*(-1)))+geom_bar(data.m, aes(fill=Var2),position="stack",stat="identity")+coord_flip()+guides(fill = FALSE)+theme(axis.ticks.x = element_blank(), axis.text.x = element_blank(),axis.title.x = element_blank(),plot.background = element_blank()) #plotting 4 panels on a page vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y) #open graphic device win.graph(width=860/72, height=450/72,pointsize = 12) #plotting grid.newpage() pushViewport(viewport(layout = grid.layout(24, 50))) # 1 rows, 8 columns #plotting print(p2, vp = vplayout(5:24, 1:10)) print(p1, vp = vplayout(5:24, 10:50),newpage=FALSE) print(p3, vp = vplayout(1:3, 9:47),newpage=FALSE) print(p4, vp = vplayout(3:5, 10:46),newpage=FALSE) #save savePlot(filename="complex", type="emf") dev.off() 方法。但扩展我的类的客户端代码通常只使用这些方法中的一个或两个。有没有一种方法可以不编译未使用的方法?

2 个答案:

答案 0 :(得分:1)

这是不可能的。编译器没有运行时信息。

答案 1 :(得分:0)

不,编译器不会排除任何未使用的代码片段进入最终编译。无论如何,编译器无法在运行时之前推断出那种信息;它不知道这种特殊方法是否会以某种方式使用。

但是,作为开发人员,你肯定可以防止这种情况发生。

有一些工具,例如PMDFindBugsSonarqube,可以对您的代码运行静态分析,以确定代码中是否存在任何未使用的方法。如果您有单元测试套件,那些工具也可以帮助向您展示未覆盖/取消代码分支(例如if语句)。像IntelliJ IDEA这样的现代IDE也可以在开发时做同样的事情。

但是对于一般情况,会有一些不必要的继承;如果你实际上只需要使用3种方法,那么选择将它们作为静态导入导入,而不是依靠继承来完成工作。这样,您的代码只使用它所需的部分,并且没有任何不需要的超重行李。